<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>My Project: drogon::HttpAppFramework类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">My Project
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">载入中...</div>
<div class="SRStatus" id="Searching">搜索中...</div>
<div class="SRStatus" id="NoMatches">未找到</div>
</div>
</div>
</div>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespacedrogon.html">drogon</a></li><li class="navelem"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pub-static-methods">静态 Public 成员函数</a> &#124;
<a href="classdrogon_1_1HttpAppFramework-members.html">所有成员列表</a>  </div>
  <div class="headertitle"><div class="title">drogon::HttpAppFramework类 参考<span class="mlabels"><span class="mlabel">abstract</span></span></div></div>
</div><!--header-->
<div class="contents">

<p><code>#include &lt;<a class="el" href="HttpAppFramework_8h_source.html">HttpAppFramework.h</a>&gt;</code></p>
<div class="dynheader">
类 drogon::HttpAppFramework 继承关系图:</div>
<div class="dyncontent">
<div class="center"><img src="classdrogon_1_1HttpAppFramework__inherit__graph.png" border="0" usemap="#adrogon_1_1HttpAppFramework_inherit__map" alt="Inheritance graph"/></div>
<map name="adrogon_1_1HttpAppFramework_inherit__map" id="adrogon_1_1HttpAppFramework_inherit__map">
<area shape="rect" title=" " alt="" coords="5,79,207,104"/>
<area shape="rect" title=" " alt="" coords="25,5,187,31"/>
<area shape="poly" title=" " alt="" coords="109,44,109,79,103,79,103,44"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">图例</a>]</span></center></div>
<div class="dynheader">
drogon::HttpAppFramework 的协作图:</div>
<div class="dyncontent">
<div class="center"><img src="classdrogon_1_1HttpAppFramework__coll__graph.png" border="0" usemap="#adrogon_1_1HttpAppFramework_coll__map" alt="Collaboration graph"/></div>
<map name="adrogon_1_1HttpAppFramework_coll__map" id="adrogon_1_1HttpAppFramework_coll__map">
<area shape="rect" title=" " alt="" coords="5,79,207,104"/>
<area shape="rect" title=" " alt="" coords="25,5,187,31"/>
<area shape="poly" title=" " alt="" coords="109,44,109,79,103,79,103,44"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">图例</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:afa6c803364316d97d80ec34e19cc69a0" id="r_afa6c803364316d97d80ec34e19cc69a0"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#afa6c803364316d97d80ec34e19cc69a0">~HttpAppFramework</a> ()=default</td></tr>
<tr class="separator:afa6c803364316d97d80ec34e19cc69a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c12778b39a3cd7e5bc1bafb285d118e" id="r_a4c12778b39a3cd7e5bc1bafb285d118e"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e">run</a> ()=0</td></tr>
<tr class="memdesc:a4c12778b39a3cd7e5bc1bafb285d118e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Run the event loop  <br /></td></tr>
<tr class="separator:a4c12778b39a3cd7e5bc1bafb285d118e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa962f3f0471d61293175b49fe9c46145" id="r_aa962f3f0471d61293175b49fe9c46145"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aa962f3f0471d61293175b49fe9c46145">isRunning</a> ()=0</td></tr>
<tr class="memdesc:aa962f3f0471d61293175b49fe9c46145"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return true if the framework is running  <br /></td></tr>
<tr class="separator:aa962f3f0471d61293175b49fe9c46145"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa7319b9724468565502b643e64472276" id="r_aa7319b9724468565502b643e64472276"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aa7319b9724468565502b643e64472276">quit</a> ()=0</td></tr>
<tr class="memdesc:aa7319b9724468565502b643e64472276"><td class="mdescLeft">&#160;</td><td class="mdescRight">Quit the event loop  <br /></td></tr>
<tr class="separator:aa7319b9724468565502b643e64472276"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af82887957c3f04200ac23d7f8add9128" id="r_af82887957c3f04200ac23d7f8add9128"><td class="memItemLeft" align="right" valign="top">virtual trantor::EventLoop *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#af82887957c3f04200ac23d7f8add9128">getLoop</a> () const =0</td></tr>
<tr class="memdesc:af82887957c3f04200ac23d7f8add9128"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the main event loop of the framework;  <br /></td></tr>
<tr class="separator:af82887957c3f04200ac23d7f8add9128"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9fa6352150ac9d3a76b621a2abdc2774" id="r_a9fa6352150ac9d3a76b621a2abdc2774"><td class="memItemLeft" align="right" valign="top">virtual trantor::EventLoop *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a9fa6352150ac9d3a76b621a2abdc2774">getIOLoop</a> (size_t id) const =0</td></tr>
<tr class="memdesc:a9fa6352150ac9d3a76b621a2abdc2774"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get an IO loop with id. E.g. 0 &lt;= id &lt; #Total thread-loops  <br /></td></tr>
<tr class="separator:a9fa6352150ac9d3a76b621a2abdc2774"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c6d63f9e8ea38d19cf220cca04eca52" id="r_a4c6d63f9e8ea38d19cf220cca04eca52"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c6d63f9e8ea38d19cf220cca04eca52">setCustom404Page</a> (const <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;resp, bool set404=true)=0</td></tr>
<tr class="memdesc:a4c6d63f9e8ea38d19cf220cca04eca52"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set custom 404 page  <br /></td></tr>
<tr class="separator:a4c6d63f9e8ea38d19cf220cca04eca52"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a097b900f53bc40913d8688e5e6abaf58" id="r_a097b900f53bc40913d8688e5e6abaf58"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a097b900f53bc40913d8688e5e6abaf58">setCustomErrorHandler</a> (std::function&lt; <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(<a class="el" href="namespacedrogon.html#ad6cc6b2c3917537432fcde077e02cf2f">HttpStatusCode</a>, const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;req)&gt; &amp;&amp;resp_generator)=0</td></tr>
<tr class="memdesc:a097b900f53bc40913d8688e5e6abaf58"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set custom error handler  <br /></td></tr>
<tr class="separator:a097b900f53bc40913d8688e5e6abaf58"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a33e3d404b2b91723397e6c2861e7c7fc" id="r_a33e3d404b2b91723397e6c2861e7c7fc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a33e3d404b2b91723397e6c2861e7c7fc">setCustomErrorHandler</a> (std::function&lt; <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(<a class="el" href="namespacedrogon.html#ad6cc6b2c3917537432fcde077e02cf2f">HttpStatusCode</a>)&gt; &amp;&amp;resp_generator)</td></tr>
<tr class="separator:a33e3d404b2b91723397e6c2861e7c7fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a86eee98f7daa1ce128abe211a524823f" id="r_a86eee98f7daa1ce128abe211a524823f"><td class="memItemLeft" align="right" valign="top">virtual const std::function&lt; <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(<a class="el" href="namespacedrogon.html#ad6cc6b2c3917537432fcde077e02cf2f">HttpStatusCode</a>, const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;req)&gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a86eee98f7daa1ce128abe211a524823f">getCustomErrorHandler</a> () const =0</td></tr>
<tr class="memdesc:a86eee98f7daa1ce128abe211a524823f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get custom error handler  <br /></td></tr>
<tr class="separator:a86eee98f7daa1ce128abe211a524823f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae1cecfdedaef7e39556a396aaf2a1ab5" id="r_ae1cecfdedaef7e39556a396aaf2a1ab5"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:ae1cecfdedaef7e39556a396aaf2a1ab5"><td class="memTemplItemLeft" align="right" valign="top">T *&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ae1cecfdedaef7e39556a396aaf2a1ab5">getPlugin</a> ()</td></tr>
<tr class="memdesc:ae1cecfdedaef7e39556a396aaf2a1ab5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the plugin object registered in the framework  <br /></td></tr>
<tr class="separator:ae1cecfdedaef7e39556a396aaf2a1ab5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae149b3238aa0ab3b4be2e050f77769f0" id="r_ae149b3238aa0ab3b4be2e050f77769f0"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:ae149b3238aa0ab3b4be2e050f77769f0"><td class="memTemplItemLeft" align="right" valign="top">std::shared_ptr&lt; T &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ae149b3238aa0ab3b4be2e050f77769f0">getSharedPlugin</a> ()</td></tr>
<tr class="memdesc:ae149b3238aa0ab3b4be2e050f77769f0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the shared_ptr plugin object registered in the framework  <br /></td></tr>
<tr class="separator:ae149b3238aa0ab3b4be2e050f77769f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c52cf207a40665d58529987b63db572" id="r_a1c52cf207a40665d58529987b63db572"><td class="memItemLeft" align="right" valign="top">virtual PluginBase *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a1c52cf207a40665d58529987b63db572">getPlugin</a> (const std::string &amp;name)=0</td></tr>
<tr class="memdesc:a1c52cf207a40665d58529987b63db572"><td class="mdescLeft">&#160;</td><td class="mdescRight">the plugin object registered in the framework  <br /></td></tr>
<tr class="separator:a1c52cf207a40665d58529987b63db572"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4aaac51bddf4870ea90b36176673bcfd" id="r_a4aaac51bddf4870ea90b36176673bcfd"><td class="memItemLeft" align="right" valign="top">virtual std::shared_ptr&lt; PluginBase &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a4aaac51bddf4870ea90b36176673bcfd">getSharedPlugin</a> (const std::string &amp;name)=0</td></tr>
<tr class="memdesc:a4aaac51bddf4870ea90b36176673bcfd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the shared_ptr plugin object registered in the framework  <br /></td></tr>
<tr class="separator:a4aaac51bddf4870ea90b36176673bcfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8bd65eb1d14e830a06fcbda24815dcd" id="r_af8bd65eb1d14e830a06fcbda24815dcd"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#af8bd65eb1d14e830a06fcbda24815dcd">registerBeginningAdvice</a> (const std::function&lt; void()&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:af8bd65eb1d14e830a06fcbda24815dcd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register a beginning advice  <br /></td></tr>
<tr class="separator:af8bd65eb1d14e830a06fcbda24815dcd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56400ea928b04fa063aec0296bc2a4d7" id="r_a56400ea928b04fa063aec0296bc2a4d7"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a56400ea928b04fa063aec0296bc2a4d7">registerNewConnectionAdvice</a> (const std::function&lt; bool(const trantor::InetAddress &amp;, const trantor::InetAddress &amp;)&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:a56400ea928b04fa063aec0296bc2a4d7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an advice for new connections  <br /></td></tr>
<tr class="separator:a56400ea928b04fa063aec0296bc2a4d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4f2096ccf94dd558ce1c5751783c0430" id="r_a4f2096ccf94dd558ce1c5751783c0430"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a4f2096ccf94dd558ce1c5751783c0430">registerHttpResponseCreationAdvice</a> (const std::function&lt; void(const <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:a4f2096ccf94dd558ce1c5751783c0430"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an advice for new HTTP responses.  <br /></td></tr>
<tr class="separator:a4f2096ccf94dd558ce1c5751783c0430"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4" id="r_ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4">registerSyncAdvice</a> (const std::function&lt; <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register a synchronous advice  <br /></td></tr>
<tr class="separator:ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ccdc4847bcdf044c2d8cd884f176b9b" id="r_a7ccdc4847bcdf044c2d8cd884f176b9b"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a7ccdc4847bcdf044c2d8cd884f176b9b">registerPreRoutingAdvice</a> (const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;, <a class="el" href="namespacedrogon.html#a537d4ab1b522ccee2c3377c4d8ea4a2e">AdviceCallback</a> &amp;&amp;, <a class="el" href="namespacedrogon.html#a32156d4371a4c378893f8c3a7f2b54c3">AdviceChainCallback</a> &amp;&amp;)&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:a7ccdc4847bcdf044c2d8cd884f176b9b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an advice called before routing  <br /></td></tr>
<tr class="separator:a7ccdc4847bcdf044c2d8cd884f176b9b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abe544fdfd2e493efe64e2ebff637800d" id="r_abe544fdfd2e493efe64e2ebff637800d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#abe544fdfd2e493efe64e2ebff637800d">registerPreRoutingAdvice</a> (const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:abe544fdfd2e493efe64e2ebff637800d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an observer called before routing  <br /></td></tr>
<tr class="separator:abe544fdfd2e493efe64e2ebff637800d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a67e7e6ced70a0f06d3b6ed67bceda81e" id="r_a67e7e6ced70a0f06d3b6ed67bceda81e"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a67e7e6ced70a0f06d3b6ed67bceda81e">registerPostRoutingAdvice</a> (const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;, <a class="el" href="namespacedrogon.html#a537d4ab1b522ccee2c3377c4d8ea4a2e">AdviceCallback</a> &amp;&amp;, <a class="el" href="namespacedrogon.html#a32156d4371a4c378893f8c3a7f2b54c3">AdviceChainCallback</a> &amp;&amp;)&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:a67e7e6ced70a0f06d3b6ed67bceda81e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an advice called after routing  <br /></td></tr>
<tr class="separator:a67e7e6ced70a0f06d3b6ed67bceda81e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a561bb2c79c7e50f25bf22e9d2dbed4c4" id="r_a561bb2c79c7e50f25bf22e9d2dbed4c4"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a561bb2c79c7e50f25bf22e9d2dbed4c4">registerPostRoutingAdvice</a> (const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:a561bb2c79c7e50f25bf22e9d2dbed4c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an observer called after routing  <br /></td></tr>
<tr class="separator:a561bb2c79c7e50f25bf22e9d2dbed4c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0e430398838613d0275ccd25833cba54" id="r_a0e430398838613d0275ccd25833cba54"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a0e430398838613d0275ccd25833cba54">registerPreHandlingAdvice</a> (const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;, <a class="el" href="namespacedrogon.html#a537d4ab1b522ccee2c3377c4d8ea4a2e">AdviceCallback</a> &amp;&amp;, <a class="el" href="namespacedrogon.html#a32156d4371a4c378893f8c3a7f2b54c3">AdviceChainCallback</a> &amp;&amp;)&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:a0e430398838613d0275ccd25833cba54"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an advice called before the request is handled  <br /></td></tr>
<tr class="separator:a0e430398838613d0275ccd25833cba54"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac5d36ac393507bbe1c3efbd16ead94ca" id="r_ac5d36ac393507bbe1c3efbd16ead94ca"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ac5d36ac393507bbe1c3efbd16ead94ca">registerPreHandlingAdvice</a> (const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:ac5d36ac393507bbe1c3efbd16ead94ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an observer called before the request is handled  <br /></td></tr>
<tr class="separator:ac5d36ac393507bbe1c3efbd16ead94ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba2cdc1128b3e48d34119cd03c1f46b3" id="r_aba2cdc1128b3e48d34119cd03c1f46b3"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aba2cdc1128b3e48d34119cd03c1f46b3">registerPostHandlingAdvice</a> (const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;, const <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:aba2cdc1128b3e48d34119cd03c1f46b3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an advice called after the request is handled  <br /></td></tr>
<tr class="separator:aba2cdc1128b3e48d34119cd03c1f46b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51de1aa2e007cd261435b0d8ad6c5b1d" id="r_a51de1aa2e007cd261435b0d8ad6c5b1d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a51de1aa2e007cd261435b0d8ad6c5b1d">registerPreSendingAdvice</a> (const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;, const <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;advice)=0</td></tr>
<tr class="memdesc:a51de1aa2e007cd261435b0d8ad6c5b1d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an advice called before a response is sent to the client.  <br /></td></tr>
<tr class="separator:a51de1aa2e007cd261435b0d8ad6c5b1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab8617b790e684ba060b7847c795fe627" id="r_ab8617b790e684ba060b7847c795fe627"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ab8617b790e684ba060b7847c795fe627">setupFileLogger</a> ()=0</td></tr>
<tr class="memdesc:ab8617b790e684ba060b7847c795fe627"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setup output of logs to files  <br /></td></tr>
<tr class="separator:ab8617b790e684ba060b7847c795fe627"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af1a661c03db7e0ef419e22277246d2e5" id="r_af1a661c03db7e0ef419e22277246d2e5"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#af1a661c03db7e0ef419e22277246d2e5">loadConfigFile</a> (const std::string &amp;fileName) noexcept(false)=0</td></tr>
<tr class="memdesc:af1a661c03db7e0ef419e22277246d2e5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load the configuration file with json format.  <br /></td></tr>
<tr class="separator:af1a661c03db7e0ef419e22277246d2e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b66acb61e3cb3cf00e012dc470699c5" id="r_a4b66acb61e3cb3cf00e012dc470699c5"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a4b66acb61e3cb3cf00e012dc470699c5">loadConfigJson</a> (const Json::Value &amp;data) noexcept(false)=0</td></tr>
<tr class="memdesc:a4b66acb61e3cb3cf00e012dc470699c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load the configuration from a Json::Value Object.  <br /></td></tr>
<tr class="separator:a4b66acb61e3cb3cf00e012dc470699c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae04fc03f2dffd836c0def92074397713" id="r_ae04fc03f2dffd836c0def92074397713"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ae04fc03f2dffd836c0def92074397713">loadConfigJson</a> (Json::Value &amp;&amp;data) noexcept(false)=0</td></tr>
<tr class="memdesc:ae04fc03f2dffd836c0def92074397713"><td class="mdescLeft">&#160;</td><td class="mdescRight">Load the configuration from a Json::Value Object.  <br /></td></tr>
<tr class="separator:ae04fc03f2dffd836c0def92074397713"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a70620e30f472b8ddd5a07d49d7c44bed" id="r_a70620e30f472b8ddd5a07d49d7c44bed"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a70620e30f472b8ddd5a07d49d7c44bed">registerHttpSimpleController</a> (const std::string &amp;pathName, const std::string &amp;ctrlName, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints={})=0</td></tr>
<tr class="memdesc:a70620e30f472b8ddd5a07d49d7c44bed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register a <a class="el" href="classdrogon_1_1HttpSimpleController.html" title="The reflection base class template for HTTP simple controllers">HttpSimpleController</a> object into the framework.  <br /></td></tr>
<tr class="separator:a70620e30f472b8ddd5a07d49d7c44bed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad00fae1ce683797d2ef05dae7177e7b7" id="r_ad00fae1ce683797d2ef05dae7177e7b7"><td class="memTemplParams" colspan="2">template&lt;typename FUNCTION &gt; </td></tr>
<tr class="memitem:ad00fae1ce683797d2ef05dae7177e7b7"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ad00fae1ce683797d2ef05dae7177e7b7">registerHandler</a> (const std::string &amp;pathPattern, FUNCTION &amp;&amp;function, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints={}, const std::string &amp;handlerName=&quot;&quot;)</td></tr>
<tr class="memdesc:ad00fae1ce683797d2ef05dae7177e7b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register a handler into the framework.  <br /></td></tr>
<tr class="separator:ad00fae1ce683797d2ef05dae7177e7b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a544b6539c7ffebce6c73f963502c6c99" id="r_a544b6539c7ffebce6c73f963502c6c99"><td class="memTemplParams" colspan="2">template&lt;typename FUNCTION &gt; </td></tr>
<tr class="memitem:a544b6539c7ffebce6c73f963502c6c99"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a544b6539c7ffebce6c73f963502c6c99">registerHandlerViaRegex</a> (const std::string &amp;regExp, FUNCTION &amp;&amp;function, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints={}, const std::string &amp;handlerName=&quot;&quot;)</td></tr>
<tr class="memdesc:a544b6539c7ffebce6c73f963502c6c99"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register a handler into the framework via a regular expression.  <br /></td></tr>
<tr class="separator:a544b6539c7ffebce6c73f963502c6c99"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a194c7c36502fdd6bc23a033ca2fa4cec" id="r_a194c7c36502fdd6bc23a033ca2fa4cec"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a194c7c36502fdd6bc23a033ca2fa4cec">registerWebSocketController</a> (const std::string &amp;pathName, const std::string &amp;ctrlName, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints={})=0</td></tr>
<tr class="memdesc:a194c7c36502fdd6bc23a033ca2fa4cec"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register a <a class="el" href="classdrogon_1_1WebSocketController.html" title="The reflection base class template for WebSocket controllers">WebSocketController</a> into the framework.  <br /></td></tr>
<tr class="separator:a194c7c36502fdd6bc23a033ca2fa4cec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:add1ce3a3afbd29df586bab2a7f540819" id="r_add1ce3a3afbd29df586bab2a7f540819"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#add1ce3a3afbd29df586bab2a7f540819">registerWebSocketControllerRegex</a> (const std::string &amp;regExp, const std::string &amp;ctrlName, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints=std::vector&lt; internal::HttpConstraint &gt;{})=0</td></tr>
<tr class="memdesc:add1ce3a3afbd29df586bab2a7f540819"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register a <a class="el" href="classdrogon_1_1WebSocketController.html" title="The reflection base class template for WebSocket controllers">WebSocketController</a> into the framework.  <br /></td></tr>
<tr class="separator:add1ce3a3afbd29df586bab2a7f540819"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a910393970399e64c391d92f8360f99bf" id="r_a910393970399e64c391d92f8360f99bf"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a910393970399e64c391d92f8360f99bf"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a910393970399e64c391d92f8360f99bf">registerController</a> (const std::shared_ptr&lt; T &gt; &amp;ctrlPtr)</td></tr>
<tr class="memdesc:a910393970399e64c391d92f8360f99bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register controller objects created and initialized by the user  <br /></td></tr>
<tr class="separator:a910393970399e64c391d92f8360f99bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7eb8c7537a3321e5221616400337f781" id="r_a7eb8c7537a3321e5221616400337f781"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a7eb8c7537a3321e5221616400337f781"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a7eb8c7537a3321e5221616400337f781">registerFilter</a> (const std::shared_ptr&lt; T &gt; &amp;filterPtr)</td></tr>
<tr class="memdesc:a7eb8c7537a3321e5221616400337f781"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register filter objects created and initialized by the user  <br /></td></tr>
<tr class="separator:a7eb8c7537a3321e5221616400337f781"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5ceb03d8c45fab4f83b5d273cef8123e" id="r_a5ceb03d8c45fab4f83b5d273cef8123e"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:a5ceb03d8c45fab4f83b5d273cef8123e"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a5ceb03d8c45fab4f83b5d273cef8123e">registerMiddleware</a> (const std::shared_ptr&lt; T &gt; &amp;middlewarePtr)</td></tr>
<tr class="memdesc:a5ceb03d8c45fab4f83b5d273cef8123e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register middleware objects created and initialized by the user  <br /></td></tr>
<tr class="separator:a5ceb03d8c45fab4f83b5d273cef8123e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ade1a5ac01daf0fa3e0ca3ac61d71761b" id="r_ade1a5ac01daf0fa3e0ca3ac61d71761b"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ade1a5ac01daf0fa3e0ca3ac61d71761b">setDefaultHandler</a> (<a class="el" href="namespacedrogon.html#a6230a342ffa91efaf6e21f872158a1d4">DefaultHandler</a> handler)=0</td></tr>
<tr class="separator:ade1a5ac01daf0fa3e0ca3ac61d71761b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad8b119392d525e5825906ff254cb1cc7" id="r_ad8b119392d525e5825906ff254cb1cc7"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ad8b119392d525e5825906ff254cb1cc7">forward</a> (const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;req, std::function&lt; void(const <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;&amp;callback, const std::string &amp;hostString=&quot;&quot;, double timeout=0)=0</td></tr>
<tr class="memdesc:ad8b119392d525e5825906ff254cb1cc7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Forward the http request  <br /></td></tr>
<tr class="separator:ad8b119392d525e5825906ff254cb1cc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aac447a3eab0f894d546b585ee8a87d76" id="r_aac447a3eab0f894d546b585ee8a87d76"><td class="memItemLeft" align="right" valign="top">virtual std::vector&lt; <a class="el" href="namespacedrogon.html#ac65852c981ca5bcf94811a26881bbc00">HttpHandlerInfo</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aac447a3eab0f894d546b585ee8a87d76">getHandlersInfo</a> () const =0</td></tr>
<tr class="memdesc:aac447a3eab0f894d546b585ee8a87d76"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get information about the handlers registered to drogon  <br /></td></tr>
<tr class="separator:aac447a3eab0f894d546b585ee8a87d76"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6f4c83d2575453fe1efd60464431608c" id="r_a6f4c83d2575453fe1efd60464431608c"><td class="memItemLeft" align="right" valign="top">virtual const Json::Value &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a6f4c83d2575453fe1efd60464431608c">getCustomConfig</a> () const =0</td></tr>
<tr class="memdesc:a6f4c83d2575453fe1efd60464431608c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the custom configuration defined by users in the configuration file.  <br /></td></tr>
<tr class="separator:a6f4c83d2575453fe1efd60464431608c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15cfc37d6c6e565ef38ec1a999dfd6e2" id="r_a15cfc37d6c6e565ef38ec1a999dfd6e2"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a15cfc37d6c6e565ef38ec1a999dfd6e2">setThreadNum</a> (size_t threadNum)=0</td></tr>
<tr class="memdesc:a15cfc37d6c6e565ef38ec1a999dfd6e2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the number of threads for IO event loops  <br /></td></tr>
<tr class="separator:a15cfc37d6c6e565ef38ec1a999dfd6e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:add0bde17d0a16461a43cee523030e453" id="r_add0bde17d0a16461a43cee523030e453"><td class="memItemLeft" align="right" valign="top">virtual size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#add0bde17d0a16461a43cee523030e453">getThreadNum</a> () const =0</td></tr>
<tr class="memdesc:add0bde17d0a16461a43cee523030e453"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the number of threads for IO event loops  <br /></td></tr>
<tr class="separator:add0bde17d0a16461a43cee523030e453"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae7334018c6f5ab8c4c25b88744d3946d" id="r_ae7334018c6f5ab8c4c25b88744d3946d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ae7334018c6f5ab8c4c25b88744d3946d">setSSLFiles</a> (const std::string &amp;certPath, const std::string &amp;keyPath)=0</td></tr>
<tr class="separator:ae7334018c6f5ab8c4c25b88744d3946d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a81a7e3e6e3788aaa5a2ae342241efa9f" id="r_a81a7e3e6e3788aaa5a2ae342241efa9f"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a81a7e3e6e3788aaa5a2ae342241efa9f">setSSLConfigCommands</a> (const std::vector&lt; std::pair&lt; std::string, std::string &gt; &gt; &amp;sslConfCmds)=0</td></tr>
<tr class="separator:a81a7e3e6e3788aaa5a2ae342241efa9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ce215269eff3565941a41f8fa5262f9" id="r_a6ce215269eff3565941a41f8fa5262f9"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a6ce215269eff3565941a41f8fa5262f9">reloadSSLFiles</a> ()=0</td></tr>
<tr class="separator:a6ce215269eff3565941a41f8fa5262f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9f4430485256d7523177a371279a5d0e" id="r_a9f4430485256d7523177a371279a5d0e"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a9f4430485256d7523177a371279a5d0e">addPlugins</a> (const Json::Value &amp;configs)=0</td></tr>
<tr class="memdesc:a9f4430485256d7523177a371279a5d0e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add plugins  <br /></td></tr>
<tr class="separator:a9f4430485256d7523177a371279a5d0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a20bdfc6b3d4dd364018fd4a342f42700" id="r_a20bdfc6b3d4dd364018fd4a342f42700"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a20bdfc6b3d4dd364018fd4a342f42700">addPlugin</a> (const std::string &amp;name, const std::vector&lt; std::string &gt; &amp;dependencies, const Json::Value &amp;config)=0</td></tr>
<tr class="memdesc:a20bdfc6b3d4dd364018fd4a342f42700"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a plugin  <br /></td></tr>
<tr class="separator:a20bdfc6b3d4dd364018fd4a342f42700"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae651c9500e50cb91495e09f39de0b124" id="r_ae651c9500e50cb91495e09f39de0b124"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ae651c9500e50cb91495e09f39de0b124">addListener</a> (const std::string &amp;ip, uint16_t port, bool useSSL=false, const std::string &amp;certFile=&quot;&quot;, const std::string &amp;keyFile=&quot;&quot;, bool useOldTLS=false, const std::vector&lt; std::pair&lt; std::string, std::string &gt; &gt; &amp;sslConfCmds={})=0</td></tr>
<tr class="memdesc:ae651c9500e50cb91495e09f39de0b124"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a listener for http or https service  <br /></td></tr>
<tr class="separator:ae651c9500e50cb91495e09f39de0b124"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a47fa6bc37acd6eef4370e070e958de34" id="r_a47fa6bc37acd6eef4370e070e958de34"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a47fa6bc37acd6eef4370e070e958de34">enableSession</a> (const size_t timeout=0, <a class="el" href="classdrogon_1_1Cookie.html#af0969c5652b7eeab6ccf22d319047e3c">Cookie::SameSite</a> sameSite=<a class="el" href="classdrogon_1_1Cookie.html#af0969c5652b7eeab6ccf22d319047e3caf2655c2dee87cb9b0646f678a630394b">Cookie::SameSite::kNull</a>, const std::string &amp;cookieKey=&quot;JSESSIONID&quot;, int maxAge=-1, std::function&lt; std::string()&gt; idGeneratorCallback=nullptr)=0</td></tr>
<tr class="memdesc:a47fa6bc37acd6eef4370e070e958de34"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable sessions supporting.  <br /></td></tr>
<tr class="separator:a47fa6bc37acd6eef4370e070e958de34"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a296351b980c11a6885448007298e4e61" id="r_a296351b980c11a6885448007298e4e61"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a296351b980c11a6885448007298e4e61">enableSession</a> (const std::chrono::duration&lt; double &gt; &amp;timeout, <a class="el" href="classdrogon_1_1Cookie.html#af0969c5652b7eeab6ccf22d319047e3c">Cookie::SameSite</a> sameSite=<a class="el" href="classdrogon_1_1Cookie.html#af0969c5652b7eeab6ccf22d319047e3caf2655c2dee87cb9b0646f678a630394b">Cookie::SameSite::kNull</a>, const std::string &amp;cookieKey=&quot;JSESSIONID&quot;, int maxAge=-1, std::function&lt; std::string()&gt; idGeneratorCallback=nullptr)</td></tr>
<tr class="memdesc:a296351b980c11a6885448007298e4e61"><td class="mdescLeft">&#160;</td><td class="mdescRight">A wrapper of the above method.  <br /></td></tr>
<tr class="separator:a296351b980c11a6885448007298e4e61"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1d469f2033f6466ee445cdad67d3fb88" id="r_a1d469f2033f6466ee445cdad67d3fb88"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a1d469f2033f6466ee445cdad67d3fb88">registerSessionStartAdvice</a> (const <a class="el" href="namespacedrogon.html#a7d7b482287e81a3b7d94a203b5d54b43">AdviceStartSessionCallback</a> &amp;advice)=0</td></tr>
<tr class="memdesc:a1d469f2033f6466ee445cdad67d3fb88"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an advice called when starting a new session.  <br /></td></tr>
<tr class="separator:a1d469f2033f6466ee445cdad67d3fb88"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a68bae121605b64f6694f011471607ed2" id="r_a68bae121605b64f6694f011471607ed2"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a68bae121605b64f6694f011471607ed2">registerSessionDestroyAdvice</a> (const <a class="el" href="namespacedrogon.html#a4a6e4ad19b218191e589e6e665442c82">AdviceDestroySessionCallback</a> &amp;advice)=0</td></tr>
<tr class="memdesc:a68bae121605b64f6694f011471607ed2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Register an advice called when destroying a session.  <br /></td></tr>
<tr class="separator:a68bae121605b64f6694f011471607ed2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8910690898d8e7e4fffb008da4e0a6d0" id="r_a8910690898d8e7e4fffb008da4e0a6d0"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a8910690898d8e7e4fffb008da4e0a6d0">disableSession</a> ()=0</td></tr>
<tr class="memdesc:a8910690898d8e7e4fffb008da4e0a6d0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Disable sessions supporting.  <br /></td></tr>
<tr class="separator:a8910690898d8e7e4fffb008da4e0a6d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a77371eb0a56cde3fe1301e2f3ef7f2b9" id="r_a77371eb0a56cde3fe1301e2f3ef7f2b9"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a77371eb0a56cde3fe1301e2f3ef7f2b9">setDocumentRoot</a> (const std::string &amp;rootPath)=0</td></tr>
<tr class="memdesc:a77371eb0a56cde3fe1301e2f3ef7f2b9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the root path of HTTP document, default path is ./  <br /></td></tr>
<tr class="separator:a77371eb0a56cde3fe1301e2f3ef7f2b9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a28278c2f408003c3c29064679be974e2" id="r_a28278c2f408003c3c29064679be974e2"><td class="memItemLeft" align="right" valign="top">virtual const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a28278c2f408003c3c29064679be974e2">getDocumentRoot</a> () const =0</td></tr>
<tr class="memdesc:a28278c2f408003c3c29064679be974e2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the document root directory.  <br /></td></tr>
<tr class="separator:a28278c2f408003c3c29064679be974e2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afabfa25facbbc3f76345cfdf234ccc3b" id="r_afabfa25facbbc3f76345cfdf234ccc3b"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#afabfa25facbbc3f76345cfdf234ccc3b">setStaticFileHeaders</a> (const std::vector&lt; std::pair&lt; std::string, std::string &gt; &gt; &amp;headers)=0</td></tr>
<tr class="memdesc:afabfa25facbbc3f76345cfdf234ccc3b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the Static File Headers  <br /></td></tr>
<tr class="separator:afabfa25facbbc3f76345cfdf234ccc3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7d1dc6bc5a94bf47c5a4a843235273e" id="r_af7d1dc6bc5a94bf47c5a4a843235273e"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#af7d1dc6bc5a94bf47c5a4a843235273e">addALocation</a> (const std::string &amp;uriPrefix, const std::string &amp;defaultContentType=&quot;&quot;, const std::string &amp;alias=&quot;&quot;, bool isCaseSensitive=false, bool allowAll=true, bool isRecursive=true, const std::vector&lt; std::string &gt; &amp;middlewareNames={})=0</td></tr>
<tr class="memdesc:af7d1dc6bc5a94bf47c5a4a843235273e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a location of static files for GET requests.  <br /></td></tr>
<tr class="separator:af7d1dc6bc5a94bf47c5a4a843235273e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a69710ac035beff2eff428ca8aca62274" id="r_a69710ac035beff2eff428ca8aca62274"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a69710ac035beff2eff428ca8aca62274">setUploadPath</a> (const std::string &amp;uploadPath)=0</td></tr>
<tr class="memdesc:a69710ac035beff2eff428ca8aca62274"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the path to store uploaded files.  <br /></td></tr>
<tr class="separator:a69710ac035beff2eff428ca8aca62274"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1e0679219dd6bdcd385c16c175a9353c" id="r_a1e0679219dd6bdcd385c16c175a9353c"><td class="memItemLeft" align="right" valign="top">virtual const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a1e0679219dd6bdcd385c16c175a9353c">getUploadPath</a> () const =0</td></tr>
<tr class="memdesc:a1e0679219dd6bdcd385c16c175a9353c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the path to store uploaded files.  <br /></td></tr>
<tr class="separator:a1e0679219dd6bdcd385c16c175a9353c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a46367f2b300bfc09bea762c4402c1de2" id="r_a46367f2b300bfc09bea762c4402c1de2"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a46367f2b300bfc09bea762c4402c1de2">setFileTypes</a> (const std::vector&lt; std::string &gt; &amp;types)=0</td></tr>
<tr class="memdesc:a46367f2b300bfc09bea762c4402c1de2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set types of files that can be downloaded.  <br /></td></tr>
<tr class="separator:a46367f2b300bfc09bea762c4402c1de2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7ceba50e3d23c20fb1130b53f269aa0f" id="r_a7ceba50e3d23c20fb1130b53f269aa0f"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a7ceba50e3d23c20fb1130b53f269aa0f">enableDynamicViewsLoading</a> (const std::vector&lt; std::string &gt; &amp;libPaths, const std::string &amp;outputPath=&quot;&quot;)=0</td></tr>
<tr class="memdesc:a7ceba50e3d23c20fb1130b53f269aa0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable supporting for dynamic views loading.  <br /></td></tr>
<tr class="separator:a7ceba50e3d23c20fb1130b53f269aa0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7a3f24f735d8b4a89d59952e006edb42" id="r_a7a3f24f735d8b4a89d59952e006edb42"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a7a3f24f735d8b4a89d59952e006edb42">setMaxConnectionNum</a> (size_t maxConnections)=0</td></tr>
<tr class="memdesc:a7a3f24f735d8b4a89d59952e006edb42"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum number of all connections.  <br /></td></tr>
<tr class="separator:a7a3f24f735d8b4a89d59952e006edb42"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a518cebb7cca6a3cadaadac85dacf90cd" id="r_a518cebb7cca6a3cadaadac85dacf90cd"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a518cebb7cca6a3cadaadac85dacf90cd">setMaxConnectionNumPerIP</a> (size_t maxConnectionsPerIP)=0</td></tr>
<tr class="memdesc:a518cebb7cca6a3cadaadac85dacf90cd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum number of connections per remote IP.  <br /></td></tr>
<tr class="separator:a518cebb7cca6a3cadaadac85dacf90cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a677163e37ee370dca947cd73618a8d" id="r_a3a677163e37ee370dca947cd73618a8d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a3a677163e37ee370dca947cd73618a8d">enableRunAsDaemon</a> ()=0</td></tr>
<tr class="memdesc:a3a677163e37ee370dca947cd73618a8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Make the application run as a daemon.  <br /></td></tr>
<tr class="separator:a3a677163e37ee370dca947cd73618a8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad147ea3002f79436ddc7d71cb95b4349" id="r_ad147ea3002f79436ddc7d71cb95b4349"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ad147ea3002f79436ddc7d71cb95b4349">disableSigtermHandling</a> ()=0</td></tr>
<tr class="memdesc:ad147ea3002f79436ddc7d71cb95b4349"><td class="mdescLeft">&#160;</td><td class="mdescRight">Disable the handling of SIGTERM signal.  <br /></td></tr>
<tr class="separator:ad147ea3002f79436ddc7d71cb95b4349"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa02a066ab7da186c89cbe86a6afed06a" id="r_aa02a066ab7da186c89cbe86a6afed06a"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aa02a066ab7da186c89cbe86a6afed06a">enableRelaunchOnError</a> ()=0</td></tr>
<tr class="memdesc:aa02a066ab7da186c89cbe86a6afed06a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Make the application restart after crashing.  <br /></td></tr>
<tr class="separator:aa02a066ab7da186c89cbe86a6afed06a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac0ceb2bddf678e012b68bff13a2e032e" id="r_ac0ceb2bddf678e012b68bff13a2e032e"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ac0ceb2bddf678e012b68bff13a2e032e">setLogPath</a> (const std::string &amp;logPath, const std::string &amp;logfileBaseName=&quot;&quot;, size_t logSize=100000000, size_t maxFiles=0, bool useSpdlog=false)=0</td></tr>
<tr class="memdesc:ac0ceb2bddf678e012b68bff13a2e032e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the output path of logs.  <br /></td></tr>
<tr class="separator:ac0ceb2bddf678e012b68bff13a2e032e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3d587ec6b873375e6512fd4cf1379c75" id="r_a3d587ec6b873375e6512fd4cf1379c75"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a3d587ec6b873375e6512fd4cf1379c75">setLogLevel</a> (trantor::Logger::LogLevel level)=0</td></tr>
<tr class="memdesc:a3d587ec6b873375e6512fd4cf1379c75"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the log level.  <br /></td></tr>
<tr class="separator:a3d587ec6b873375e6512fd4cf1379c75"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa34219883b51989bebb0aef4f812707d" id="r_aa34219883b51989bebb0aef4f812707d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aa34219883b51989bebb0aef4f812707d">setLogLocalTime</a> (bool on)=0</td></tr>
<tr class="memdesc:aa34219883b51989bebb0aef4f812707d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the log time display  <br /></td></tr>
<tr class="separator:aa34219883b51989bebb0aef4f812707d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4982584f8996e7371a6393f65816d935" id="r_a4982584f8996e7371a6393f65816d935"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a4982584f8996e7371a6393f65816d935">enableSendfile</a> (bool sendFile)=0</td></tr>
<tr class="memdesc:a4982584f8996e7371a6393f65816d935"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable the sendfile system call in linux.  <br /></td></tr>
<tr class="separator:a4982584f8996e7371a6393f65816d935"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adf018700c57a6ca14d2c8ea811c25932" id="r_adf018700c57a6ca14d2c8ea811c25932"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#adf018700c57a6ca14d2c8ea811c25932">enableGzip</a> (bool useGzip)=0</td></tr>
<tr class="memdesc:adf018700c57a6ca14d2c8ea811c25932"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable gzip compression.  <br /></td></tr>
<tr class="separator:adf018700c57a6ca14d2c8ea811c25932"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afc2d00126e0d4faaf3fac7a07c0d2d4a" id="r_afc2d00126e0d4faaf3fac7a07c0d2d4a"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#afc2d00126e0d4faaf3fac7a07c0d2d4a">isGzipEnabled</a> () const =0</td></tr>
<tr class="memdesc:afc2d00126e0d4faaf3fac7a07c0d2d4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return true if gzip is enabled.  <br /></td></tr>
<tr class="separator:afc2d00126e0d4faaf3fac7a07c0d2d4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa0c66572e9341c5782045ccb854ebe05" id="r_aa0c66572e9341c5782045ccb854ebe05"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aa0c66572e9341c5782045ccb854ebe05">enableBrotli</a> (bool useBrotli)=0</td></tr>
<tr class="memdesc:aa0c66572e9341c5782045ccb854ebe05"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable brotli compression.  <br /></td></tr>
<tr class="separator:aa0c66572e9341c5782045ccb854ebe05"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7f970411013ba4ba8cd8036feb0692e6" id="r_a7f970411013ba4ba8cd8036feb0692e6"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a7f970411013ba4ba8cd8036feb0692e6">isBrotliEnabled</a> () const =0</td></tr>
<tr class="memdesc:a7f970411013ba4ba8cd8036feb0692e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return true if brotli is enabled.  <br /></td></tr>
<tr class="separator:a7f970411013ba4ba8cd8036feb0692e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0a6a7b6f237941e16f09a26d41103c6f" id="r_a0a6a7b6f237941e16f09a26d41103c6f"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a0a6a7b6f237941e16f09a26d41103c6f">setStaticFilesCacheTime</a> (int cacheTime)=0</td></tr>
<tr class="memdesc:a0a6a7b6f237941e16f09a26d41103c6f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the time in which the static file response is cached in memory.  <br /></td></tr>
<tr class="separator:a0a6a7b6f237941e16f09a26d41103c6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8ab6c816fadd534323d68d9ab65d910e" id="r_a8ab6c816fadd534323d68d9ab65d910e"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a8ab6c816fadd534323d68d9ab65d910e">staticFilesCacheTime</a> () const =0</td></tr>
<tr class="memdesc:a8ab6c816fadd534323d68d9ab65d910e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the time set by the above method.  <br /></td></tr>
<tr class="separator:a8ab6c816fadd534323d68d9ab65d910e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4fa25be4e600a3b9dbe881a39b0ea7a" id="r_aa4fa25be4e600a3b9dbe881a39b0ea7a"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aa4fa25be4e600a3b9dbe881a39b0ea7a">setIdleConnectionTimeout</a> (size_t timeout)=0</td></tr>
<tr class="memdesc:aa4fa25be4e600a3b9dbe881a39b0ea7a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the lifetime of the connection without read or write  <br /></td></tr>
<tr class="separator:aa4fa25be4e600a3b9dbe881a39b0ea7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae969ce5c4165fe3472ca4da6c9232dcc" id="r_ae969ce5c4165fe3472ca4da6c9232dcc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ae969ce5c4165fe3472ca4da6c9232dcc">setIdleConnectionTimeout</a> (const std::chrono::duration&lt; double &gt; &amp;timeout)</td></tr>
<tr class="memdesc:ae969ce5c4165fe3472ca4da6c9232dcc"><td class="mdescLeft">&#160;</td><td class="mdescRight">A wrapper of the above method.  <br /></td></tr>
<tr class="separator:ae969ce5c4165fe3472ca4da6c9232dcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8d764c9333057b4dff82d85112598a27" id="r_a8d764c9333057b4dff82d85112598a27"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a8d764c9333057b4dff82d85112598a27">setServerHeaderField</a> (const std::string &amp;server)=0</td></tr>
<tr class="memdesc:a8d764c9333057b4dff82d85112598a27"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the 'server' header field in each response sent by drogon.  <br /></td></tr>
<tr class="separator:a8d764c9333057b4dff82d85112598a27"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a41aa615ffb255041767f764fac07f7c1" id="r_a41aa615ffb255041767f764fac07f7c1"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a41aa615ffb255041767f764fac07f7c1">enableServerHeader</a> (bool flag)=0</td></tr>
<tr class="memdesc:a41aa615ffb255041767f764fac07f7c1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Control if the 'Server' header is added to each HTTP response.  <br /></td></tr>
<tr class="separator:a41aa615ffb255041767f764fac07f7c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad1d815db1929a04af4231ccdab63142e" id="r_ad1d815db1929a04af4231ccdab63142e"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ad1d815db1929a04af4231ccdab63142e">enableDateHeader</a> (bool flag)=0</td></tr>
<tr class="memdesc:ad1d815db1929a04af4231ccdab63142e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Control if the 'Date' header is added to each HTTP response.  <br /></td></tr>
<tr class="separator:ad1d815db1929a04af4231ccdab63142e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae1fb314a643797c3c838129ea1052c2a" id="r_ae1fb314a643797c3c838129ea1052c2a"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ae1fb314a643797c3c838129ea1052c2a">setKeepaliveRequestsNumber</a> (const size_t number)=0</td></tr>
<tr class="separator:ae1fb314a643797c3c838129ea1052c2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cd9ddada2792e6ade214f1c892a675c" id="r_a8cd9ddada2792e6ade214f1c892a675c"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a8cd9ddada2792e6ade214f1c892a675c">setPipeliningRequestsNumber</a> (const size_t number)=0</td></tr>
<tr class="separator:a8cd9ddada2792e6ade214f1c892a675c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8345103776398d6143c9201731ad5a4" id="r_aa8345103776398d6143c9201731ad5a4"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aa8345103776398d6143c9201731ad5a4">setGzipStatic</a> (bool useGzipStatic)=0</td></tr>
<tr class="memdesc:aa8345103776398d6143c9201731ad5a4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the gzip_static option.  <br /></td></tr>
<tr class="separator:aa8345103776398d6143c9201731ad5a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a97e8d845b2cbc974ba04341c278fc9" id="r_a9a97e8d845b2cbc974ba04341c278fc9"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a9a97e8d845b2cbc974ba04341c278fc9">setBrStatic</a> (bool useGzipStatic)=0</td></tr>
<tr class="memdesc:a9a97e8d845b2cbc974ba04341c278fc9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the br_static option.  <br /></td></tr>
<tr class="separator:a9a97e8d845b2cbc974ba04341c278fc9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a36c0da321a5b8ea26d04b1870d8c6275" id="r_a36c0da321a5b8ea26d04b1870d8c6275"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a36c0da321a5b8ea26d04b1870d8c6275">setClientMaxBodySize</a> (size_t maxSize)=0</td></tr>
<tr class="memdesc:a36c0da321a5b8ea26d04b1870d8c6275"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the max body size of the requests received by drogon.  <br /></td></tr>
<tr class="separator:a36c0da321a5b8ea26d04b1870d8c6275"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf62c16bf24e4997903a8e88a83debbd" id="r_aaf62c16bf24e4997903a8e88a83debbd"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aaf62c16bf24e4997903a8e88a83debbd">setClientMaxMemoryBodySize</a> (size_t maxSize)=0</td></tr>
<tr class="memdesc:aaf62c16bf24e4997903a8e88a83debbd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum body size in memory of HTTP requests received by drogon.  <br /></td></tr>
<tr class="separator:aaf62c16bf24e4997903a8e88a83debbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a45928b4c3da43543455a6298821761f9" id="r_a45928b4c3da43543455a6298821761f9"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a45928b4c3da43543455a6298821761f9">setClientMaxWebSocketMessageSize</a> (size_t maxSize)=0</td></tr>
<tr class="memdesc:a45928b4c3da43543455a6298821761f9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the max size of messages sent by WebSocket client.  <br /></td></tr>
<tr class="separator:a45928b4c3da43543455a6298821761f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6cab6cc475b7ff44c048b345cc40a911" id="r_a6cab6cc475b7ff44c048b345cc40a911"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a6cab6cc475b7ff44c048b345cc40a911">setHomePage</a> (const std::string &amp;homePageFile)=0</td></tr>
<tr class="separator:a6cab6cc475b7ff44c048b345cc40a911"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9d6e58208adc803f4f1adbcae1c74ebd" id="r_a9d6e58208adc803f4f1adbcae1c74ebd"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a9d6e58208adc803f4f1adbcae1c74ebd">setTermSignalHandler</a> (const std::function&lt; void()&gt; &amp;handler)=0</td></tr>
<tr class="memdesc:a9d6e58208adc803f4f1adbcae1c74ebd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the TERM Signal Handler. This method provides a way to users for exiting program gracefully. When the TERM signal is received after <a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">app()</a>.<a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e" title="Run the event loop">run()</a> is called, the handler is invoked. Drogon uses a default signal handler for the TERM signal, which calls the '<a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">app()</a>.<a class="el" href="classdrogon_1_1HttpAppFramework.html#aa7319b9724468565502b643e64472276" title="Quit the event loop">quit()</a>' method when the TERM signal is received.  <br /></td></tr>
<tr class="separator:a9d6e58208adc803f4f1adbcae1c74ebd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad8d263e25fd3093a2991375043e8885d" id="r_ad8d263e25fd3093a2991375043e8885d"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ad8d263e25fd3093a2991375043e8885d">setIntSignalHandler</a> (const std::function&lt; void()&gt; &amp;handler)=0</td></tr>
<tr class="memdesc:ad8d263e25fd3093a2991375043e8885d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the INT Signal Handler. This method provides a way to users for exiting program gracefully. When the INT signal is received after <a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">app()</a>.<a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e" title="Run the event loop">run()</a> is called, the handler is invoked. Drogon uses a default signal handler for the INT signal, which calls the '<a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">app()</a>.<a class="el" href="classdrogon_1_1HttpAppFramework.html#aa7319b9724468565502b643e64472276" title="Quit the event loop">quit()</a>' method when the INT signal is received.  <br /></td></tr>
<tr class="separator:ad8d263e25fd3093a2991375043e8885d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aee1c93381197890e0cbac1d0a9837c86" id="r_aee1c93381197890e0cbac1d0a9837c86"><td class="memItemLeft" align="right" valign="top">virtual const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aee1c93381197890e0cbac1d0a9837c86">getHomePage</a> () const =0</td></tr>
<tr class="memdesc:aee1c93381197890e0cbac1d0a9837c86"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get homepage, default is "index.html"  <br /></td></tr>
<tr class="separator:aee1c93381197890e0cbac1d0a9837c86"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a280b1e1a57aee757eccd92a0a2abe1e9" id="r_a280b1e1a57aee757eccd92a0a2abe1e9"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a280b1e1a57aee757eccd92a0a2abe1e9">setImplicitPageEnable</a> (bool useImplicitPage)=0</td></tr>
<tr class="memdesc:a280b1e1a57aee757eccd92a0a2abe1e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set to enable implicit pages, enabled by default  <br /></td></tr>
<tr class="separator:a280b1e1a57aee757eccd92a0a2abe1e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a503e40d551e6d3b68beed0bd98a6825c" id="r_a503e40d551e6d3b68beed0bd98a6825c"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a503e40d551e6d3b68beed0bd98a6825c">isImplicitPageEnabled</a> () const =0</td></tr>
<tr class="memdesc:a503e40d551e6d3b68beed0bd98a6825c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return true if implicit pages are enabled  <br /></td></tr>
<tr class="separator:a503e40d551e6d3b68beed0bd98a6825c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc6e26bbb45d1b14784d97d00e949ee9" id="r_adc6e26bbb45d1b14784d97d00e949ee9"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#adc6e26bbb45d1b14784d97d00e949ee9">setImplicitPage</a> (const std::string &amp;implicitPageFile)=0</td></tr>
<tr class="memdesc:adc6e26bbb45d1b14784d97d00e949ee9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the page which would the server load in if it detects that the user requested a directory  <br /></td></tr>
<tr class="separator:adc6e26bbb45d1b14784d97d00e949ee9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a69b2594f9a7ceefda06caf4e545a7376" id="r_a69b2594f9a7ceefda06caf4e545a7376"><td class="memItemLeft" align="right" valign="top">virtual const std::string &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a69b2594f9a7ceefda06caf4e545a7376">getImplicitPage</a> () const =0</td></tr>
<tr class="memdesc:a69b2594f9a7ceefda06caf4e545a7376"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the implicit HTML page  <br /></td></tr>
<tr class="separator:a69b2594f9a7ceefda06caf4e545a7376"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0d7e5636304cbdf0e307029e8c4affc8" id="r_a0d7e5636304cbdf0e307029e8c4affc8"><td class="memItemLeft" align="right" valign="top">virtual orm::DbClientPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a0d7e5636304cbdf0e307029e8c4affc8">getDbClient</a> (const std::string &amp;name=&quot;default&quot;)=0</td></tr>
<tr class="memdesc:a0d7e5636304cbdf0e307029e8c4affc8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a database client by name  <br /></td></tr>
<tr class="separator:a0d7e5636304cbdf0e307029e8c4affc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac707080880ab7c471af5d7e126c75d8f" id="r_ac707080880ab7c471af5d7e126c75d8f"><td class="memItemLeft" align="right" valign="top">virtual orm::DbClientPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ac707080880ab7c471af5d7e126c75d8f">getFastDbClient</a> (const std::string &amp;name=&quot;default&quot;)=0</td></tr>
<tr class="memdesc:ac707080880ab7c471af5d7e126c75d8f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a 'fast' database client by name  <br /></td></tr>
<tr class="separator:ac707080880ab7c471af5d7e126c75d8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9cd5437ac43356e1b0f6f06c8c6a046b" id="r_a9cd5437ac43356e1b0f6f06c8c6a046b"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a9cd5437ac43356e1b0f6f06c8c6a046b">areAllDbClientsAvailable</a> () const noexcept=0</td></tr>
<tr class="memdesc:a9cd5437ac43356e1b0f6f06c8c6a046b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if all database clients in the framework are available (connect to the database successfully).  <br /></td></tr>
<tr class="separator:a9cd5437ac43356e1b0f6f06c8c6a046b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab14ee7b684523f71def60f47484e3edb" id="r_ab14ee7b684523f71def60f47484e3edb"><td class="memItemLeft" align="right" valign="top">virtual nosql::RedisClientPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ab14ee7b684523f71def60f47484e3edb">getRedisClient</a> (const std::string &amp;name=&quot;default&quot;)=0</td></tr>
<tr class="memdesc:ab14ee7b684523f71def60f47484e3edb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a redis client by name  <br /></td></tr>
<tr class="separator:ab14ee7b684523f71def60f47484e3edb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa0b28f4bbe9d7e1c2d18dd88f65fd92f" id="r_aa0b28f4bbe9d7e1c2d18dd88f65fd92f"><td class="memItemLeft" align="right" valign="top">virtual nosql::RedisClientPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aa0b28f4bbe9d7e1c2d18dd88f65fd92f">getFastRedisClient</a> (const std::string &amp;name=&quot;default&quot;)=0</td></tr>
<tr class="memdesc:aa0b28f4bbe9d7e1c2d18dd88f65fd92f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a 'fast' redis client by name  <br /></td></tr>
<tr class="separator:aa0b28f4bbe9d7e1c2d18dd88f65fd92f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a17f4f8e6d76eb7fa28ab8bad5892d2b3" id="r_a17f4f8e6d76eb7fa28ab8bad5892d2b3"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a17f4f8e6d76eb7fa28ab8bad5892d2b3">setJsonParserStackLimit</a> (size_t limit) noexcept=0</td></tr>
<tr class="memdesc:a17f4f8e6d76eb7fa28ab8bad5892d2b3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the maximum stack depth of the json parser when reading a json string, the default value is 1000.  <br /></td></tr>
<tr class="separator:a17f4f8e6d76eb7fa28ab8bad5892d2b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a53e136a4fe9f8457dd10dba7c16976bf" id="r_a53e136a4fe9f8457dd10dba7c16976bf"><td class="memItemLeft" align="right" valign="top">virtual size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a53e136a4fe9f8457dd10dba7c16976bf">getJsonParserStackLimit</a> () const noexcept=0</td></tr>
<tr class="memdesc:a53e136a4fe9f8457dd10dba7c16976bf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the maximum stack depth of the json parser when reading a json string.  <br /></td></tr>
<tr class="separator:a53e136a4fe9f8457dd10dba7c16976bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab68f020f7725e5eebcc98b6eedc7522e" id="r_ab68f020f7725e5eebcc98b6eedc7522e"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ab68f020f7725e5eebcc98b6eedc7522e">setUnicodeEscapingInJson</a> (bool enable) noexcept=0</td></tr>
<tr class="memdesc:ab68f020f7725e5eebcc98b6eedc7522e"><td class="mdescLeft">&#160;</td><td class="mdescRight">This method is to enable or disable the unicode escaping (\u) in the json string of HTTP responses or requests. it works (disable successfully) when the version of JsonCpp &gt;= 1.9.3, the unicode escaping is enabled by default.  <br /></td></tr>
<tr class="separator:ab68f020f7725e5eebcc98b6eedc7522e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a335ea930d4ef7c1e15fe6f5cb365532e" id="r_a335ea930d4ef7c1e15fe6f5cb365532e"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a335ea930d4ef7c1e15fe6f5cb365532e">isUnicodeEscapingUsedInJson</a> () const noexcept=0</td></tr>
<tr class="memdesc:a335ea930d4ef7c1e15fe6f5cb365532e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if the unicode escaping is used in the json string of HTTP requests and responses.  <br /></td></tr>
<tr class="separator:a335ea930d4ef7c1e15fe6f5cb365532e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8a23c529a665eec3df0a9ca96862f6e8" id="r_a8a23c529a665eec3df0a9ca96862f6e8"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a8a23c529a665eec3df0a9ca96862f6e8">setFloatPrecisionInJson</a> (unsigned int precision, const std::string &amp;precisionType=&quot;significant&quot;) noexcept=0</td></tr>
<tr class="memdesc:a8a23c529a665eec3df0a9ca96862f6e8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the float precision in Json string of HTTP requests or responses with json content.  <br /></td></tr>
<tr class="separator:a8a23c529a665eec3df0a9ca96862f6e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace68f1911549b60be256a3a3f2791574" id="r_ace68f1911549b60be256a3a3f2791574"><td class="memItemLeft" align="right" valign="top">virtual const std::pair&lt; unsigned int, std::string &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ace68f1911549b60be256a3a3f2791574">getFloatPrecisionInJson</a> () const noexcept=0</td></tr>
<tr class="memdesc:ace68f1911549b60be256a3a3f2791574"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the float precision set by the above method.  <br /></td></tr>
<tr class="separator:ace68f1911549b60be256a3a3f2791574"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a725518abacc673f1f11016e026edc138" id="r_a725518abacc673f1f11016e026edc138"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a725518abacc673f1f11016e026edc138">createDbClient</a> (const std::string &amp;dbType, const std::string &amp;host, unsigned short port, const std::string &amp;databaseName, const std::string &amp;userName, const std::string &amp;password, size_t connectionNum=1, const std::string &amp;filename=&quot;&quot;, const std::string &amp;name=&quot;default&quot;, bool isFast=false, const std::string &amp;characterSet=&quot;&quot;, double timeout=-1.0, bool autoBatch=false)=0</td></tr>
<tr class="memdesc:a725518abacc673f1f11016e026edc138"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a database client  <br /></td></tr>
<tr class="separator:a725518abacc673f1f11016e026edc138"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aedc3d404dd8a2607ac3b0db7caf21a68" id="r_aedc3d404dd8a2607ac3b0db7caf21a68"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#aedc3d404dd8a2607ac3b0db7caf21a68">addDbClient</a> (const orm::DbConfig &amp;config)=0</td></tr>
<tr class="separator:aedc3d404dd8a2607ac3b0db7caf21a68"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a95ff94b097d0c270577de623717feffb" id="r_a95ff94b097d0c270577de623717feffb"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a95ff94b097d0c270577de623717feffb">createRedisClient</a> (const std::string &amp;ip, unsigned short port, const std::string &amp;name=&quot;default&quot;, const std::string &amp;password=&quot;&quot;, size_t connectionNum=1, bool isFast=false, double timeout=-1.0, unsigned int db=0, const std::string &amp;username=&quot;&quot;)=0</td></tr>
<tr class="memdesc:a95ff94b097d0c270577de623717feffb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create a redis client  <br /></td></tr>
<tr class="separator:a95ff94b097d0c270577de623717feffb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a63ddf81daba69969ba1b613eea7c70ca" id="r_a63ddf81daba69969ba1b613eea7c70ca"><td class="memItemLeft" align="right" valign="top">virtual const std::shared_ptr&lt; trantor::Resolver &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a63ddf81daba69969ba1b613eea7c70ca">getResolver</a> () const =0</td></tr>
<tr class="memdesc:a63ddf81daba69969ba1b613eea7c70ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the DNS resolver  <br /></td></tr>
<tr class="separator:a63ddf81daba69969ba1b613eea7c70ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a395602917030a9f4d11455d77b99ae43" id="r_a395602917030a9f4d11455d77b99ae43"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a395602917030a9f4d11455d77b99ae43">supportSSL</a> () const =0</td></tr>
<tr class="memdesc:a395602917030a9f4d11455d77b99ae43"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return true is drogon supports SSL(https)  <br /></td></tr>
<tr class="separator:a395602917030a9f4d11455d77b99ae43"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af59cc013141e80a539e3dc6d1d4423c5" id="r_af59cc013141e80a539e3dc6d1d4423c5"><td class="memItemLeft" align="right" valign="top">virtual size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#af59cc013141e80a539e3dc6d1d4423c5">getCurrentThreadIndex</a> () const =0</td></tr>
<tr class="memdesc:af59cc013141e80a539e3dc6d1d4423c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the Current Thread Index whose range is [0, the total number of IO threads]  <br /></td></tr>
<tr class="separator:af59cc013141e80a539e3dc6d1d4423c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac936c105cb3be034b5010e15012661b1" id="r_ac936c105cb3be034b5010e15012661b1"><td class="memItemLeft" align="right" valign="top">virtual std::vector&lt; trantor::InetAddress &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ac936c105cb3be034b5010e15012661b1">getListeners</a> () const =0</td></tr>
<tr class="memdesc:ac936c105cb3be034b5010e15012661b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the addresses of listeners.  <br /></td></tr>
<tr class="separator:ac936c105cb3be034b5010e15012661b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abaa5973fbb87248c2430b28105fd43ba" id="r_abaa5973fbb87248c2430b28105fd43ba"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#abaa5973fbb87248c2430b28105fd43ba">enableReusePort</a> (bool enable=true)=0</td></tr>
<tr class="memdesc:abaa5973fbb87248c2430b28105fd43ba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Enable ReusePort mode or not. If the mode is enabled, one can run multiple processes listening to the same port at the same time. If this method is not called, the feature is disabled.  <br /></td></tr>
<tr class="separator:abaa5973fbb87248c2430b28105fd43ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a865eff6a9fe531389ca6f73b5b057c8f" id="r_a865eff6a9fe531389ca6f73b5b057c8f"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a865eff6a9fe531389ca6f73b5b057c8f">reusePort</a> () const =0</td></tr>
<tr class="memdesc:a865eff6a9fe531389ca6f73b5b057c8f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return if the ReusePort mode is enabled.  <br /></td></tr>
<tr class="separator:a865eff6a9fe531389ca6f73b5b057c8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8cb71111ea2c0cf6e8d188719131f436" id="r_a8cb71111ea2c0cf6e8d188719131f436"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a8cb71111ea2c0cf6e8d188719131f436">setExceptionHandler</a> (<a class="el" href="namespacedrogon.html#a401611ee31e9c20e3114471db14cfb52">ExceptionHandler</a> handler)=0</td></tr>
<tr class="memdesc:a8cb71111ea2c0cf6e8d188719131f436"><td class="mdescLeft">&#160;</td><td class="mdescRight">handler will be called upon an exception escapes a request handler  <br /></td></tr>
<tr class="separator:a8cb71111ea2c0cf6e8d188719131f436"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab7cab4117fd533b8434b434ffe3e4a57" id="r_ab7cab4117fd533b8434b434ffe3e4a57"><td class="memItemLeft" align="right" valign="top">virtual const <a class="el" href="namespacedrogon.html#a401611ee31e9c20e3114471db14cfb52">ExceptionHandler</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ab7cab4117fd533b8434b434ffe3e4a57">getExceptionHandler</a> () const =0</td></tr>
<tr class="memdesc:ab7cab4117fd533b8434b434ffe3e4a57"><td class="mdescLeft">&#160;</td><td class="mdescRight">returns the excaption handler  <br /></td></tr>
<tr class="separator:ab7cab4117fd533b8434b434ffe3e4a57"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a182d73ab3ebc7779a3d22ea7ae92417b" id="r_a182d73ab3ebc7779a3d22ea7ae92417b"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a182d73ab3ebc7779a3d22ea7ae92417b">registerCustomExtensionMime</a> (const std::string &amp;ext, const std::string &amp;mime)=0</td></tr>
<tr class="memdesc:a182d73ab3ebc7779a3d22ea7ae92417b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adds a new custom extension to MIME type mapping  <br /></td></tr>
<tr class="separator:a182d73ab3ebc7779a3d22ea7ae92417b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4870d11d7c7db833d51a3fa3fe6c4675" id="r_a4870d11d7c7db833d51a3fa3fe6c4675"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a4870d11d7c7db833d51a3fa3fe6c4675">enableCompressedRequest</a> (bool enable=true)=0</td></tr>
<tr class="separator:a4870d11d7c7db833d51a3fa3fe6c4675"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a904b6dd3b5b2d4db8b59d65a77c7da4a" id="r_a904b6dd3b5b2d4db8b59d65a77c7da4a"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a904b6dd3b5b2d4db8b59d65a77c7da4a">isCompressedRequestEnabled</a> () const =0</td></tr>
<tr class="separator:a904b6dd3b5b2d4db8b59d65a77c7da4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae302b135b92260ba230cad55f0d97ed0" id="r_ae302b135b92260ba230cad55f0d97ed0"><td class="memItemLeft" align="right" valign="top">virtual int64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#ae302b135b92260ba230cad55f0d97ed0">getConnectionCount</a> () const =0</td></tr>
<tr class="separator:ae302b135b92260ba230cad55f0d97ed0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8fb989335bfd8f81be21514799c04de3" id="r_a8fb989335bfd8f81be21514799c04de3"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a8fb989335bfd8f81be21514799c04de3">setBeforeListenSockOptCallback</a> (std::function&lt; void(int)&gt; cb)=0</td></tr>
<tr class="memdesc:a8fb989335bfd8f81be21514799c04de3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the before listen setsockopt callback.  <br /></td></tr>
<tr class="separator:a8fb989335bfd8f81be21514799c04de3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8798844067f66159bd0377f816999967" id="r_a8798844067f66159bd0377f816999967"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a8798844067f66159bd0377f816999967">setAfterAcceptSockOptCallback</a> (std::function&lt; void(int)&gt; cb)=0</td></tr>
<tr class="memdesc:a8798844067f66159bd0377f816999967"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the after accept setsockopt callback.  <br /></td></tr>
<tr class="separator:a8798844067f66159bd0377f816999967"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:addb73b0199a3fe628f1628f511e26ec5" id="r_addb73b0199a3fe628f1628f511e26ec5"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#addb73b0199a3fe628f1628f511e26ec5">setConnectionCallback</a> (std::function&lt; void(const trantor::TcpConnectionPtr &amp;)&gt; cb)=0</td></tr>
<tr class="memdesc:addb73b0199a3fe628f1628f511e26ec5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the client disconnect or connect callback.  <br /></td></tr>
<tr class="separator:addb73b0199a3fe628f1628f511e26ec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afb7c4868a218f7ff3daf7ce88533ad44" id="r_afb7c4868a218f7ff3daf7ce88533ad44"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#afb7c4868a218f7ff3daf7ce88533ad44">enableRequestStream</a> (bool enable=true)=0</td></tr>
<tr class="separator:afb7c4868a218f7ff3daf7ce88533ad44"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abed3bba7b1adf8b87a3e2141ec2c7915" id="r_abed3bba7b1adf8b87a3e2141ec2c7915"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#abed3bba7b1adf8b87a3e2141ec2c7915">isRequestStreamEnabled</a> () const =0</td></tr>
<tr class="separator:abed3bba7b1adf8b87a3e2141ec2c7915"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-methods" name="pub-static-methods"></a>
静态 Public 成员函数</h2></td></tr>
<tr class="memitem:a58d7081d285af682bad71f5151e95aae" id="r_a58d7081d285af682bad71f5151e95aae"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classdrogon_1_1HttpAppFramework.html#a58d7081d285af682bad71f5151e95aae">instance</a> ()</td></tr>
<tr class="memdesc:a58d7081d285af682bad71f5151e95aae"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the instance of <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a>  <br /></td></tr>
<tr class="separator:a58d7081d285af682bad71f5151e95aae"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">构造及析构函数说明</h2>
<a id="afa6c803364316d97d80ec34e19cc69a0" name="afa6c803364316d97d80ec34e19cc69a0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa6c803364316d97d80ec34e19cc69a0">&#9670;&#160;</a></span>~HttpAppFramework()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual drogon::HttpAppFramework::~HttpAppFramework </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span><span class="mlabel">default</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<h2 class="groupheader">成员函数说明</h2>
<a id="af7d1dc6bc5a94bf47c5a4a843235273e" name="af7d1dc6bc5a94bf47c5a4a843235273e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af7d1dc6bc5a94bf47c5a4a843235273e">&#9670;&#160;</a></span>addALocation()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::addALocation </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>uriPrefix</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>defaultContentType</em> = <code>&quot;&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>alias</em> = <code>&quot;&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>isCaseSensitive</em> = <code>false</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>allowAll</em> = <code>true</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>isRecursive</em> = <code>true</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
          <td class="paramname"><em>middlewareNames</em> = <code>{}</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Add a location of static files for GET requests. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">uriPrefix</td><td>The URI prefix of the location prefixed with "/" </td></tr>
    <tr><td class="paramname">defaultContentType</td><td>The default content type of the static files without an extension. </td></tr>
    <tr><td class="paramname">alias</td><td>The location in file system, if it is prefixed with "/", it presents an absolute path, otherwise it presents a relative path to the document_root path. </td></tr>
    <tr><td class="paramname">isCaseSensitive</td><td></td></tr>
    <tr><td class="paramname">allowAll</td><td>If it is set to false, only static files with a valid extension can be accessed. </td></tr>
    <tr><td class="paramname">isRecursive</td><td>If it is set to false, files in sub directories can't be accessed. </td></tr>
    <tr><td class="paramname">middlewareNames</td><td>The list of middlewares which acting on the location. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a>&amp; </dd></dl>

</div>
</div>
<a id="aedc3d404dd8a2607ac3b0db7caf21a68" name="aedc3d404dd8a2607ac3b0db7caf21a68"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aedc3d404dd8a2607ac3b0db7caf21a68">&#9670;&#160;</a></span>addDbClient()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::addDbClient </td>
          <td>(</td>
          <td class="paramtype">const orm::DbConfig &amp;&#160;</td>
          <td class="paramname"><em>config</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="ae651c9500e50cb91495e09f39de0b124" name="ae651c9500e50cb91495e09f39de0b124"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae651c9500e50cb91495e09f39de0b124">&#9670;&#160;</a></span>addListener()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::addListener </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>ip</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint16_t&#160;</td>
          <td class="paramname"><em>port</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>useSSL</em> = <code>false</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>certFile</em> = <code>&quot;&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>keyFile</em> = <code>&quot;&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>useOldTLS</em> = <code>false</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; std::pair&lt; std::string, std::string &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>sslConfCmds</em> = <code>{}</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Add a listener for http or https service </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">ip</td><td>is the ip that the listener listens on. </td></tr>
    <tr><td class="paramname">port</td><td>is the port that the listener listens on. </td></tr>
    <tr><td class="paramname">useSSL</td><td>if the parameter is true, the listener is used for the https service. </td></tr>
    <tr><td class="paramname">certFile</td><td></td></tr>
    <tr><td class="paramname">keyFile</td><td>specify the cert file and the private key file for this listener. If they are empty, the global configuration set by the above method is used. </td></tr>
    <tr><td class="paramname">useOldTLS</td><td>if true, the TLS1.0/1.1 are enabled for HTTPS connections. </td></tr>
    <tr><td class="paramname">sslConfCmds</td><td>vector of ssl configuration key/value pairs.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a20bdfc6b3d4dd364018fd4a342f42700" name="a20bdfc6b3d4dd364018fd4a342f42700"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a20bdfc6b3d4dd364018fd4a342f42700">&#9670;&#160;</a></span>addPlugin()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void drogon::HttpAppFramework::addPlugin </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
          <td class="paramname"><em>dependencies</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Json::Value &amp;&#160;</td>
          <td class="paramname"><em>config</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Add a plugin </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">name</td><td>Name of the plugin </td></tr>
    <tr><td class="paramname">dependencies</td><td>Names of plugins this plugin depends on </td></tr>
    <tr><td class="paramname">config</td><td>Custom config for the plugin </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a9f4430485256d7523177a371279a5d0e" name="a9f4430485256d7523177a371279a5d0e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9f4430485256d7523177a371279a5d0e">&#9670;&#160;</a></span>addPlugins()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void drogon::HttpAppFramework::addPlugins </td>
          <td>(</td>
          <td class="paramtype">const Json::Value &amp;&#160;</td>
          <td class="paramname"><em>configs</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Add plugins </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">configs</td><td>The plugins array</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a9cd5437ac43356e1b0f6f06c8c6a046b" name="a9cd5437ac43356e1b0f6f06c8c6a046b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9cd5437ac43356e1b0f6f06c8c6a046b">&#9670;&#160;</a></span>areAllDbClientsAvailable()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool drogon::HttpAppFramework::areAllDbClientsAvailable </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Check if all database clients in the framework are available (connect to the database successfully). </p>

</div>
</div>
<a id="a725518abacc673f1f11016e026edc138" name="a725518abacc673f1f11016e026edc138"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a725518abacc673f1f11016e026edc138">&#9670;&#160;</a></span>createDbClient()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::createDbClient </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>dbType</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>host</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned short&#160;</td>
          <td class="paramname"><em>port</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>databaseName</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>userName</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>password</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>connectionNum</em> = <code>1</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>filename</em> = <code>&quot;&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>name</em> = <code>&quot;default&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>isFast</em> = <code>false</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>characterSet</em> = <code>&quot;&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>timeout</em> = <code>-1.0</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>autoBatch</em> = <code>false</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Create a database client </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">dbType</td><td>The database type is one of "postgresql","mysql","sqlite3". </td></tr>
    <tr><td class="paramname">host</td><td>IP or host name. </td></tr>
    <tr><td class="paramname">port</td><td>The port on which the database server is listening. </td></tr>
    <tr><td class="paramname">databaseName</td><td>Database name </td></tr>
    <tr><td class="paramname">userName</td><td>User name </td></tr>
    <tr><td class="paramname">password</td><td>Password for the database server </td></tr>
    <tr><td class="paramname">connectionNum</td><td>The number of connections to the database server. It's valid only if <code>isFast</code> is false. </td></tr>
    <tr><td class="paramname">filename</td><td>The file name of sqlite3 database file. </td></tr>
    <tr><td class="paramname">name</td><td>The client name. </td></tr>
    <tr><td class="paramname">isFast</td><td>Indicates if the client is a fast database client. </td></tr>
    <tr><td class="paramname">characterSet</td><td>The character set of the database server. </td></tr>
    <tr><td class="paramname">timeout</td><td>The timeout in seconds for executing SQL queries. zero or negative value means no timeout.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a95ff94b097d0c270577de623717feffb" name="a95ff94b097d0c270577de623717feffb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a95ff94b097d0c270577de623717feffb">&#9670;&#160;</a></span>createRedisClient()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::createRedisClient </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>ip</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned short&#160;</td>
          <td class="paramname"><em>port</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>name</em> = <code>&quot;default&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>password</em> = <code>&quot;&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>connectionNum</em> = <code>1</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>isFast</em> = <code>false</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>timeout</em> = <code>-1.0</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned int&#160;</td>
          <td class="paramname"><em>db</em> = <code>0</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>username</em> = <code>&quot;&quot;</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Create a redis client </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">ip</td><td>IP of redis server. </td></tr>
    <tr><td class="paramname">port</td><td>The port on which the redis server is listening. </td></tr>
    <tr><td class="paramname">name</td><td>The client name. </td></tr>
    <tr><td class="paramname">username</td><td>Username for redis server </td></tr>
    <tr><td class="paramname">password</td><td>Password for the redis server </td></tr>
    <tr><td class="paramname">connectionNum</td><td>The number of connections to the redis server. </td></tr>
    <tr><td class="paramname">isFast</td><td>Indicates if the client is a fast database client.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a8910690898d8e7e4fffb008da4e0a6d0" name="a8910690898d8e7e4fffb008da4e0a6d0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8910690898d8e7e4fffb008da4e0a6d0">&#9670;&#160;</a></span>disableSession()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::disableSession </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Disable sessions supporting. </p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="ad147ea3002f79436ddc7d71cb95b4349" name="ad147ea3002f79436ddc7d71cb95b4349"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad147ea3002f79436ddc7d71cb95b4349">&#9670;&#160;</a></span>disableSigtermHandling()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::disableSigtermHandling </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Disable the handling of SIGTERM signal. </p>
<p>Enabled by default.</p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. When disabled <a class="el" href="classdrogon_1_1HttpAppFramework.html#a9d6e58208adc803f4f1adbcae1c74ebd" title="Set the TERM Signal Handler. This method provides a way to users for exiting program gracefully....">setTermSignalHandler()</a> is useless </dd></dl>

</div>
</div>
<a id="aa0c66572e9341c5782045ccb854ebe05" name="aa0c66572e9341c5782045ccb854ebe05"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa0c66572e9341c5782045ccb854ebe05">&#9670;&#160;</a></span>enableBrotli()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableBrotli </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>useBrotli</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Enable brotli compression. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">useBrotli</td><td>if the parameter is true, use brotli to compress the response body's content; The default value is true.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. After brotli is enabled, brotli is used under the following conditions:<ol type="1">
<li>The content type of response is not a binary type.</li>
<li>The content length is bigger than 1024 bytes. </li>
</ol>
</dd></dl>

</div>
</div>
<a id="a4870d11d7c7db833d51a3fa3fe6c4675" name="a4870d11d7c7db833d51a3fa3fe6c4675"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4870d11d7c7db833d51a3fa3fe6c4675">&#9670;&#160;</a></span>enableCompressedRequest()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableCompressedRequest </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>enable</em> = <code>true</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="ad1d815db1929a04af4231ccdab63142e" name="ad1d815db1929a04af4231ccdab63142e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad1d815db1929a04af4231ccdab63142e">&#9670;&#160;</a></span>enableDateHeader()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableDateHeader </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>flag</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Control if the 'Date' header is added to each HTTP response. </p>
<dl class="section note"><dt>注解</dt><dd>These operations can be performed by options in the configuration file. The headers are sent to clients by default. </dd></dl>

</div>
</div>
<a id="a7ceba50e3d23c20fb1130b53f269aa0f" name="a7ceba50e3d23c20fb1130b53f269aa0f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ceba50e3d23c20fb1130b53f269aa0f">&#9670;&#160;</a></span>enableDynamicViewsLoading()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableDynamicViewsLoading </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
          <td class="paramname"><em>libPaths</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>outputPath</em> = <code>&quot;&quot;</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Enable supporting for dynamic views loading. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">libPaths</td><td>is a vector that contains paths to view files.</td></tr>
    <tr><td class="paramname">outputPath</td><td>is the directory where the output source files locate. If it is set to an empty string, drogon use libPaths as output paths. If the path isn't prefixed with /, it is the relative path of the current working directory.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>It is disabled by default. This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="adf018700c57a6ca14d2c8ea811c25932" name="adf018700c57a6ca14d2c8ea811c25932"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adf018700c57a6ca14d2c8ea811c25932">&#9670;&#160;</a></span>enableGzip()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableGzip </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>useGzip</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Enable gzip compression. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">useGzip</td><td>if the parameter is true, use gzip to compress the response body's content; The default value is true.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. After gzip is enabled, gzip is used under the following conditions:<ol type="1">
<li>The content type of response is not a binary type.</li>
<li>The content length is bigger than 1024 bytes. </li>
</ol>
</dd></dl>

</div>
</div>
<a id="aa02a066ab7da186c89cbe86a6afed06a" name="aa02a066ab7da186c89cbe86a6afed06a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa02a066ab7da186c89cbe86a6afed06a">&#9670;&#160;</a></span>enableRelaunchOnError()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableRelaunchOnError </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Make the application restart after crashing. </p>
<p>Disabled by default.</p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="afb7c4868a218f7ff3daf7ce88533ad44" name="afb7c4868a218f7ff3daf7ce88533ad44"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afb7c4868a218f7ff3daf7ce88533ad44">&#9670;&#160;</a></span>enableRequestStream()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableRequestStream </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>enable</em> = <code>true</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="abaa5973fbb87248c2430b28105fd43ba" name="abaa5973fbb87248c2430b28105fd43ba"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abaa5973fbb87248c2430b28105fd43ba">&#9670;&#160;</a></span>enableReusePort()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void drogon::HttpAppFramework::enableReusePort </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>enable</em> = <code>true</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Enable ReusePort mode or not. If the mode is enabled, one can run multiple processes listening to the same port at the same time. If this method is not called, the feature is disabled. </p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a3a677163e37ee370dca947cd73618a8d" name="a3a677163e37ee370dca947cd73618a8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3a677163e37ee370dca947cd73618a8d">&#9670;&#160;</a></span>enableRunAsDaemon()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableRunAsDaemon </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Make the application run as a daemon. </p>
<p>Disabled by default.</p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a4982584f8996e7371a6393f65816d935" name="a4982584f8996e7371a6393f65816d935"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4982584f8996e7371a6393f65816d935">&#9670;&#160;</a></span>enableSendfile()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableSendfile </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>sendFile</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Enable the sendfile system call in linux. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">sendFile</td><td>if the parameter is true, sendfile() system-call is used to send static files to clients; The default value is true.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. Even though sendfile() is enabled, only files larger than 200k are sent this way, because the advantages of sendfile() can only be reflected in sending large files. </dd></dl>

</div>
</div>
<a id="a41aa615ffb255041767f764fac07f7c1" name="a41aa615ffb255041767f764fac07f7c1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41aa615ffb255041767f764fac07f7c1">&#9670;&#160;</a></span>enableServerHeader()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableServerHeader </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>flag</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Control if the 'Server' header is added to each HTTP response. </p>
<dl class="section note"><dt>注解</dt><dd>These operations can be performed by options in the configuration file. The headers are sent to clients by default. </dd></dl>

</div>
</div>
<a id="a47fa6bc37acd6eef4370e070e958de34" name="a47fa6bc37acd6eef4370e070e958de34"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a47fa6bc37acd6eef4370e070e958de34">&#9670;&#160;</a></span>enableSession() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableSession </td>
          <td>(</td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>timeout</em> = <code>0</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classdrogon_1_1Cookie.html#af0969c5652b7eeab6ccf22d319047e3c">Cookie::SameSite</a>&#160;</td>
          <td class="paramname"><em>sameSite</em> = <code><a class="el" href="classdrogon_1_1Cookie.html#af0969c5652b7eeab6ccf22d319047e3caf2655c2dee87cb9b0646f678a630394b">Cookie::SameSite::kNull</a></code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>cookieKey</em> = <code>&quot;JSESSIONID&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>maxAge</em> = <code>-1</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::function&lt; std::string()&gt;&#160;</td>
          <td class="paramname"><em>idGeneratorCallback</em> = <code>nullptr</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Enable sessions supporting. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">timeout</td><td>The number of seconds which is the timeout of a session </td></tr>
    <tr><td class="paramname">sameSite</td><td>The default value of SameSite attribute </td></tr>
    <tr><td class="paramname">cookieKey</td><td>The key of the session cookie</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd><a class="el" href="classdrogon_1_1Session.html" title="This class represents a session stored in the framework. One can get or set any type of data to a ses...">Session</a> support is disabled by default. If there isn't any request from a client for timeout(&gt;0) seconds, the session of the client is destroyed. If the timeout parameter is equal to 0, sessions will remain permanently This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a296351b980c11a6885448007298e4e61" name="a296351b980c11a6885448007298e4e61"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a296351b980c11a6885448007298e4e61">&#9670;&#160;</a></span>enableSession() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::enableSession </td>
          <td>(</td>
          <td class="paramtype">const std::chrono::duration&lt; double &gt; &amp;&#160;</td>
          <td class="paramname"><em>timeout</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classdrogon_1_1Cookie.html#af0969c5652b7eeab6ccf22d319047e3c">Cookie::SameSite</a>&#160;</td>
          <td class="paramname"><em>sameSite</em> = <code><a class="el" href="classdrogon_1_1Cookie.html#af0969c5652b7eeab6ccf22d319047e3caf2655c2dee87cb9b0646f678a630394b">Cookie::SameSite::kNull</a></code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>cookieKey</em> = <code>&quot;JSESSIONID&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>maxAge</em> = <code>-1</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::function&lt; std::string()&gt;&#160;</td>
          <td class="paramname"><em>idGeneratorCallback</em> = <code>nullptr</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>A wrapper of the above method. </p>
<p>Example: Users can set the timeout value as follows: </p><div class="fragment"><div class="line"><a class="code hl_function" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">app</a>().<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a47fa6bc37acd6eef4370e070e958de34">enableSession</a>(0.2h);</div>
<div class="line"><a class="code hl_function" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">app</a>().<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a47fa6bc37acd6eef4370e070e958de34">enableSession</a>(12min);</div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a47fa6bc37acd6eef4370e070e958de34"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a47fa6bc37acd6eef4370e070e958de34">drogon::HttpAppFramework::enableSession</a></div><div class="ttdeci">virtual HttpAppFramework &amp; enableSession(const size_t timeout=0, Cookie::SameSite sameSite=Cookie::SameSite::kNull, const std::string &amp;cookieKey=&quot;JSESSIONID&quot;, int maxAge=-1, std::function&lt; std::string()&gt; idGeneratorCallback=nullptr)=0</div><div class="ttdoc">Enable sessions supporting.</div></div>
<div class="ttc" id="anamespacedrogon_html_a0be61eeb45a4c229be4041cd60d0d906"><div class="ttname"><a href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">drogon::app</a></div><div class="ttdeci">HttpAppFramework &amp; app()</div><div class="ttdoc">A wrapper of the instance() method</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:1656</div></div>
</div><!-- fragment --> 
</div>
</div>
<a id="ad8b119392d525e5825906ff254cb1cc7" name="ad8b119392d525e5825906ff254cb1cc7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad8b119392d525e5825906ff254cb1cc7">&#9670;&#160;</a></span>forward()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void drogon::HttpAppFramework::forward </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;&#160;</td>
          <td class="paramname"><em>req</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::function&lt; void(const <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;&amp;&#160;</td>
          <td class="paramname"><em>callback</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>hostString</em> = <code>&quot;&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>timeout</em> = <code>0</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Forward the http request </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">req</td><td>the HTTP request to be forwarded; </td></tr>
    <tr><td class="paramname">hostString</td><td>is the address where the request is forwarded. The following strings are valid for the parameter:</td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line">https:<span class="comment">//www.baidu.com</span></div>
<div class="line">http:<span class="comment">//www.baidu.com</span></div>
<div class="line">https:<span class="comment">//127.0.0.1:8080/</span></div>
<div class="line">http:<span class="comment">//127.0.0.1</span></div>
<div class="line">http:<span class="comment">//[::1]:8080/</span></div>
</div><!-- fragment --><dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">timeout</td><td>See the timeout parameter of the sendRequest method of the <a class="el" href="classdrogon_1_1HttpClient.html" title="Asynchronous http client">HttpClient</a> class. this parameter is only valid when the hostString is not empty. </td></tr>
    <tr><td class="paramname">callback</td><td>is called when the response is created.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>If the hostString parameter is empty, the request is handled by the same application, so in this condition one should modify the path of the req parameter before forwarding to avoid infinite loop processing.</dd></dl>
<p>This method can be used to implement reverse proxy or redirection on the server side. </p>

</div>
</div>
<a id="ae302b135b92260ba230cad55f0d97ed0" name="ae302b135b92260ba230cad55f0d97ed0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae302b135b92260ba230cad55f0d97ed0">&#9670;&#160;</a></span>getConnectionCount()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual int64_t drogon::HttpAppFramework::getConnectionCount </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="af59cc013141e80a539e3dc6d1d4423c5" name="af59cc013141e80a539e3dc6d1d4423c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af59cc013141e80a539e3dc6d1d4423c5">&#9670;&#160;</a></span>getCurrentThreadIndex()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual size_t drogon::HttpAppFramework::getCurrentThreadIndex </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the Current Thread Index whose range is [0, the total number of IO threads] </p>
<dl class="section return"><dt>返回</dt><dd>size_t If the current thread is the main EventLoop thread (in which the <a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">app()</a>.<a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e" title="Run the event loop">run()</a> is called), the number of the IO threads is returned. If the current thread is a network IO thread, the index of it in the range [0, the number of IO threads) is returned. otherwise the maximum value of type size_t is returned.</dd></dl>
<dl class="section note"><dt>注解</dt><dd>Basically this method is used for storing thread-related various in an array and users can use indexes returned by this method to access them. This is much faster than using a map. If the array is properly initialized at the beginning, users can access it without locks. </dd></dl>

</div>
</div>
<a id="a6f4c83d2575453fe1efd60464431608c" name="a6f4c83d2575453fe1efd60464431608c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6f4c83d2575453fe1efd60464431608c">&#9670;&#160;</a></span>getCustomConfig()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual const Json::Value &amp; drogon::HttpAppFramework::getCustomConfig </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the custom configuration defined by users in the configuration file. </p>

</div>
</div>
<a id="a86eee98f7daa1ce128abe211a524823f" name="a86eee98f7daa1ce128abe211a524823f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a86eee98f7daa1ce128abe211a524823f">&#9670;&#160;</a></span>getCustomErrorHandler()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual const std::function&lt; <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(<a class="el" href="namespacedrogon.html#ad6cc6b2c3917537432fcde077e02cf2f">HttpStatusCode</a>, const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;req)&gt; &amp; drogon::HttpAppFramework::getCustomErrorHandler </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get custom error handler </p>
<dl class="section return"><dt>返回</dt><dd>A const-reference to the error handler set using setCustomErrorHandler. If none was provided, the default error handler is returned. </dd></dl>

</div>
</div>
<a id="a0d7e5636304cbdf0e307029e8c4affc8" name="a0d7e5636304cbdf0e307029e8c4affc8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0d7e5636304cbdf0e307029e8c4affc8">&#9670;&#160;</a></span>getDbClient()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual orm::DbClientPtr drogon::HttpAppFramework::getDbClient </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>name</em> = <code>&quot;default&quot;</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get a database client by name </p>
<dl class="section note"><dt>注解</dt><dd>This method must be called after the framework has been run. </dd></dl>

</div>
</div>
<a id="a28278c2f408003c3c29064679be974e2" name="a28278c2f408003c3c29064679be974e2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a28278c2f408003c3c29064679be974e2">&#9670;&#160;</a></span>getDocumentRoot()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual const std::string &amp; drogon::HttpAppFramework::getDocumentRoot </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the document root directory. </p>

</div>
</div>
<a id="ab7cab4117fd533b8434b434ffe3e4a57" name="ab7cab4117fd533b8434b434ffe3e4a57"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab7cab4117fd533b8434b434ffe3e4a57">&#9670;&#160;</a></span>getExceptionHandler()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual const <a class="el" href="namespacedrogon.html#a401611ee31e9c20e3114471db14cfb52">ExceptionHandler</a> &amp; drogon::HttpAppFramework::getExceptionHandler </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>returns the excaption handler </p>

</div>
</div>
<a id="ac707080880ab7c471af5d7e126c75d8f" name="ac707080880ab7c471af5d7e126c75d8f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac707080880ab7c471af5d7e126c75d8f">&#9670;&#160;</a></span>getFastDbClient()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual orm::DbClientPtr drogon::HttpAppFramework::getFastDbClient </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>name</em> = <code>&quot;default&quot;</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get a 'fast' database client by name </p>
<dl class="section note"><dt>注解</dt><dd>This method must be called after the framework has been run. </dd></dl>

</div>
</div>
<a id="aa0b28f4bbe9d7e1c2d18dd88f65fd92f" name="aa0b28f4bbe9d7e1c2d18dd88f65fd92f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa0b28f4bbe9d7e1c2d18dd88f65fd92f">&#9670;&#160;</a></span>getFastRedisClient()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual nosql::RedisClientPtr drogon::HttpAppFramework::getFastRedisClient </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>name</em> = <code>&quot;default&quot;</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get a 'fast' redis client by name </p>
<dl class="section note"><dt>注解</dt><dd>This method must be called after the framework has been run. </dd></dl>

</div>
</div>
<a id="ace68f1911549b60be256a3a3f2791574" name="ace68f1911549b60be256a3a3f2791574"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ace68f1911549b60be256a3a3f2791574">&#9670;&#160;</a></span>getFloatPrecisionInJson()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual const std::pair&lt; unsigned int, std::string &gt; &amp; drogon::HttpAppFramework::getFloatPrecisionInJson </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the float precision set by the above method. </p>
<dl class="section return"><dt>返回</dt><dd>std::pair&lt;size_t, std::string&gt; </dd></dl>

</div>
</div>
<a id="aac447a3eab0f894d546b585ee8a87d76" name="aac447a3eab0f894d546b585ee8a87d76"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac447a3eab0f894d546b585ee8a87d76">&#9670;&#160;</a></span>getHandlersInfo()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual std::vector&lt; <a class="el" href="namespacedrogon.html#ac65852c981ca5bcf94811a26881bbc00">HttpHandlerInfo</a> &gt; drogon::HttpAppFramework::getHandlersInfo </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get information about the handlers registered to drogon </p>
<dl class="section return"><dt>返回</dt><dd>The first item of std::tuple in the return value represents the path pattern of the handler; The last item in std::tuple is the description of the handler. </dd></dl>

</div>
</div>
<a id="aee1c93381197890e0cbac1d0a9837c86" name="aee1c93381197890e0cbac1d0a9837c86"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aee1c93381197890e0cbac1d0a9837c86">&#9670;&#160;</a></span>getHomePage()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual const std::string &amp; drogon::HttpAppFramework::getHomePage </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get homepage, default is "index.html" </p>
<dl class="section note"><dt>注解</dt><dd>This method must be called after the framework has been run. </dd></dl>

</div>
</div>
<a id="a69b2594f9a7ceefda06caf4e545a7376" name="a69b2594f9a7ceefda06caf4e545a7376"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a69b2594f9a7ceefda06caf4e545a7376">&#9670;&#160;</a></span>getImplicitPage()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual const std::string &amp; drogon::HttpAppFramework::getImplicitPage </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the implicit HTML page </p>
<dl class="section note"><dt>注解</dt><dd>This method must be called after the framework has been run. </dd></dl>

</div>
</div>
<a id="a9fa6352150ac9d3a76b621a2abdc2774" name="a9fa6352150ac9d3a76b621a2abdc2774"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9fa6352150ac9d3a76b621a2abdc2774">&#9670;&#160;</a></span>getIOLoop()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual trantor::EventLoop * drogon::HttpAppFramework::getIOLoop </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>id</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get an IO loop with id. E.g. 0 &lt;= id &lt; #Total thread-loops </p>
<dl class="section note"><dt>注解</dt><dd>The event loop is one of the network IO loops. Use the loop for events/actions rather then the main thread. REMARKS : Function assumed the number of threads will not exceed 2^32. Change to long long for alien computers. </dd></dl>

</div>
</div>
<a id="a53e136a4fe9f8457dd10dba7c16976bf" name="a53e136a4fe9f8457dd10dba7c16976bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a53e136a4fe9f8457dd10dba7c16976bf">&#9670;&#160;</a></span>getJsonParserStackLimit()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual size_t drogon::HttpAppFramework::getJsonParserStackLimit </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the maximum stack depth of the json parser when reading a json string. </p>

</div>
</div>
<a id="ac936c105cb3be034b5010e15012661b1" name="ac936c105cb3be034b5010e15012661b1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac936c105cb3be034b5010e15012661b1">&#9670;&#160;</a></span>getListeners()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual std::vector&lt; trantor::InetAddress &gt; drogon::HttpAppFramework::getListeners </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the addresses of listeners. </p>
<dl class="section return"><dt>返回</dt><dd>std::vector&lt;trantor::InetAddress&gt; </dd></dl>
<dl class="section note"><dt>注解</dt><dd>This method should be called after calling the <a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">app()</a>.<a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e" title="Run the event loop">run()</a>. One could run this method in an AOP join point (such as the BeginningAdvice). </dd></dl>

</div>
</div>
<a id="af82887957c3f04200ac23d7f8add9128" name="af82887957c3f04200ac23d7f8add9128"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af82887957c3f04200ac23d7f8add9128">&#9670;&#160;</a></span>getLoop()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual trantor::EventLoop * drogon::HttpAppFramework::getLoop </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the main event loop of the framework; </p>
<dl class="section note"><dt>注解</dt><dd>The event loop is not the network IO loop, but the main event loop of the framework in which only some timer tasks are running; User can run some timer tasks or other tasks in this loop; This method can be call in any thread. </dd></dl>

</div>
</div>
<a id="ae1cecfdedaef7e39556a396aaf2a1ab5" name="ae1cecfdedaef7e39556a396aaf2a1ab5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae1cecfdedaef7e39556a396aaf2a1ab5">&#9670;&#160;</a></span>getPlugin() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">T * drogon::HttpAppFramework::getPlugin </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the plugin object registered in the framework </p>
<dl class="section note"><dt>注解</dt><dd>This method is usually called after the framework runs. Calling this method in the initAndStart() method of plugins is also valid. </dd></dl>

</div>
</div>
<a id="a1c52cf207a40665d58529987b63db572" name="a1c52cf207a40665d58529987b63db572"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1c52cf207a40665d58529987b63db572">&#9670;&#160;</a></span>getPlugin() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual PluginBase * drogon::HttpAppFramework::getPlugin </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>name</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>the plugin object registered in the framework </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">name</td><td>is the class name of the plugin.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This method is usually called after the framework runs. Calling this method in the initAndStart() method of plugins is also valid. </dd></dl>

</div>
</div>
<a id="ab14ee7b684523f71def60f47484e3edb" name="ab14ee7b684523f71def60f47484e3edb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab14ee7b684523f71def60f47484e3edb">&#9670;&#160;</a></span>getRedisClient()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual nosql::RedisClientPtr drogon::HttpAppFramework::getRedisClient </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>name</em> = <code>&quot;default&quot;</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get a redis client by name </p>
<dl class="section note"><dt>注解</dt><dd>This method must be called after the framework has been run. </dd></dl>

</div>
</div>
<a id="a63ddf81daba69969ba1b613eea7c70ca" name="a63ddf81daba69969ba1b613eea7c70ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a63ddf81daba69969ba1b613eea7c70ca">&#9670;&#160;</a></span>getResolver()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual const std::shared_ptr&lt; trantor::Resolver &gt; &amp; drogon::HttpAppFramework::getResolver </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the DNS resolver </p>
<dl class="section note"><dt>注解</dt><dd>When the c-ares library is installed in the system, it runs with the best performance. </dd></dl>

</div>
</div>
<a id="ae149b3238aa0ab3b4be2e050f77769f0" name="ae149b3238aa0ab3b4be2e050f77769f0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae149b3238aa0ab3b4be2e050f77769f0">&#9670;&#160;</a></span>getSharedPlugin() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::shared_ptr&lt; T &gt; drogon::HttpAppFramework::getSharedPlugin </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the shared_ptr plugin object registered in the framework </p>
<dl class="section note"><dt>注解</dt><dd>This method is usually called after the framework runs. Calling this method in the initAndStart() method of plugins is also valid. </dd></dl>

</div>
</div>
<a id="a4aaac51bddf4870ea90b36176673bcfd" name="a4aaac51bddf4870ea90b36176673bcfd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4aaac51bddf4870ea90b36176673bcfd">&#9670;&#160;</a></span>getSharedPlugin() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual std::shared_ptr&lt; PluginBase &gt; drogon::HttpAppFramework::getSharedPlugin </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>name</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the shared_ptr plugin object registered in the framework </p>
<dl class="section note"><dt>注解</dt><dd>This method is usually called after the framework runs. Calling this method in the initAndStart() method of plugins is also valid. </dd></dl>

</div>
</div>
<a id="add0bde17d0a16461a43cee523030e453" name="add0bde17d0a16461a43cee523030e453"></a>
<h2 class="memtitle"><span class="permalink"><a href="#add0bde17d0a16461a43cee523030e453">&#9670;&#160;</a></span>getThreadNum()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual size_t drogon::HttpAppFramework::getThreadNum </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the number of threads for IO event loops </p>

</div>
</div>
<a id="a1e0679219dd6bdcd385c16c175a9353c" name="a1e0679219dd6bdcd385c16c175a9353c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1e0679219dd6bdcd385c16c175a9353c">&#9670;&#160;</a></span>getUploadPath()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual const std::string &amp; drogon::HttpAppFramework::getUploadPath </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the path to store uploaded files. </p>

</div>
</div>
<a id="a58d7081d285af682bad71f5151e95aae" name="a58d7081d285af682bad71f5151e95aae"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a58d7081d285af682bad71f5151e95aae">&#9670;&#160;</a></span>instance()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::instance </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the instance of <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> </p>
<p><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> works at singleton mode, so any calling of this method gets the same instance; Calling <a class="el" href="classdrogon_1_1HttpAppFramework.html#a58d7081d285af682bad71f5151e95aae" title="Get the instance of HttpAppFramework">drogon::HttpAppFramework::instance()</a> can be replaced by a simple interface &ndash; <a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">drogon::app()</a> </p>

</div>
</div>
<a id="a7f970411013ba4ba8cd8036feb0692e6" name="a7f970411013ba4ba8cd8036feb0692e6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7f970411013ba4ba8cd8036feb0692e6">&#9670;&#160;</a></span>isBrotliEnabled()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool drogon::HttpAppFramework::isBrotliEnabled </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Return true if brotli is enabled. </p>

</div>
</div>
<a id="a904b6dd3b5b2d4db8b59d65a77c7da4a" name="a904b6dd3b5b2d4db8b59d65a77c7da4a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a904b6dd3b5b2d4db8b59d65a77c7da4a">&#9670;&#160;</a></span>isCompressedRequestEnabled()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool drogon::HttpAppFramework::isCompressedRequestEnabled </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="afc2d00126e0d4faaf3fac7a07c0d2d4a" name="afc2d00126e0d4faaf3fac7a07c0d2d4a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afc2d00126e0d4faaf3fac7a07c0d2d4a">&#9670;&#160;</a></span>isGzipEnabled()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool drogon::HttpAppFramework::isGzipEnabled </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Return true if gzip is enabled. </p>

</div>
</div>
<a id="a503e40d551e6d3b68beed0bd98a6825c" name="a503e40d551e6d3b68beed0bd98a6825c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a503e40d551e6d3b68beed0bd98a6825c">&#9670;&#160;</a></span>isImplicitPageEnabled()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool drogon::HttpAppFramework::isImplicitPageEnabled </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Return true if implicit pages are enabled </p>
<dl class="section note"><dt>注解</dt><dd>This method must be called after the framework has been run. </dd></dl>

</div>
</div>
<a id="abed3bba7b1adf8b87a3e2141ec2c7915" name="abed3bba7b1adf8b87a3e2141ec2c7915"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abed3bba7b1adf8b87a3e2141ec2c7915">&#9670;&#160;</a></span>isRequestStreamEnabled()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool drogon::HttpAppFramework::isRequestStreamEnabled </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="aa962f3f0471d61293175b49fe9c46145" name="aa962f3f0471d61293175b49fe9c46145"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa962f3f0471d61293175b49fe9c46145">&#9670;&#160;</a></span>isRunning()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool drogon::HttpAppFramework::isRunning </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Return true if the framework is running </p>

</div>
</div>
<a id="a335ea930d4ef7c1e15fe6f5cb365532e" name="a335ea930d4ef7c1e15fe6f5cb365532e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a335ea930d4ef7c1e15fe6f5cb365532e">&#9670;&#160;</a></span>isUnicodeEscapingUsedInJson()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool drogon::HttpAppFramework::isUnicodeEscapingUsedInJson </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Check if the unicode escaping is used in the json string of HTTP requests and responses. </p>

</div>
</div>
<a id="af1a661c03db7e0ef419e22277246d2e5" name="af1a661c03db7e0ef419e22277246d2e5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af1a661c03db7e0ef419e22277246d2e5">&#9670;&#160;</a></span>loadConfigFile()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::loadConfigFile </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>fileName</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Load the configuration file with json format. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">fileName</td><td>the configuration file </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a4b66acb61e3cb3cf00e012dc470699c5" name="a4b66acb61e3cb3cf00e012dc470699c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4b66acb61e3cb3cf00e012dc470699c5">&#9670;&#160;</a></span>loadConfigJson() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::loadConfigJson </td>
          <td>(</td>
          <td class="paramtype">const Json::Value &amp;&#160;</td>
          <td class="paramname"><em>data</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Load the configuration from a Json::Value Object. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">data</td><td>Json::Value Object containing the configuration. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Please refer to the configuration file for the content of the json object. </dd></dl>

</div>
</div>
<a id="ae04fc03f2dffd836c0def92074397713" name="ae04fc03f2dffd836c0def92074397713"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae04fc03f2dffd836c0def92074397713">&#9670;&#160;</a></span>loadConfigJson() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::loadConfigJson </td>
          <td>(</td>
          <td class="paramtype">Json::Value &amp;&amp;&#160;</td>
          <td class="paramname"><em>data</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Load the configuration from a Json::Value Object. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">data</td><td>rvalue reference to a Json::Value object containing the configuration. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Please refer to the configuration file for the content of the json object. </dd></dl>

</div>
</div>
<a id="aa7319b9724468565502b643e64472276" name="aa7319b9724468565502b643e64472276"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa7319b9724468565502b643e64472276">&#9670;&#160;</a></span>quit()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void drogon::HttpAppFramework::quit </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Quit the event loop </p>
<p>Calling this method results in stopping all network IO in the framework and interrupting the blocking of the <a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e" title="Run the event loop">run()</a> method. Usually, after calling this method, the application exits (when the <a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e" title="Run the event loop">run()</a> method is called in the main thread).</p>
<dl class="section note"><dt>注解</dt><dd>This method can be called in any thread and anywhere. This method should not be called before calling <a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e" title="Run the event loop">run()</a>. </dd></dl>

</div>
</div>
<a id="af8bd65eb1d14e830a06fcbda24815dcd" name="af8bd65eb1d14e830a06fcbda24815dcd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af8bd65eb1d14e830a06fcbda24815dcd">&#9670;&#160;</a></span>registerBeginningAdvice()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerBeginningAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void()&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register a beginning advice </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called immediately after the main event loop runs. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a910393970399e64c391d92f8360f99bf" name="a910393970399e64c391d92f8360f99bf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a910393970399e64c391d92f8360f99bf">&#9670;&#160;</a></span>registerController()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerController </td>
          <td>(</td>
          <td class="paramtype">const std::shared_ptr&lt; T &gt; &amp;&#160;</td>
          <td class="paramname"><em>ctrlPtr</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register controller objects created and initialized by the user </p>
<p>Drogon can only automatically create controllers using the default constructor. Sometimes users want to be able to create controllers using constructors with parameters. Controllers created by user in this way should be registered to the framework via this method. The macro or configuration file is still valid for the path routing configuration of the controller created by users.</p>
<dl class="section note"><dt>注解</dt><dd>The declaration of the controller class must be as follows: <div class="fragment"><div class="line"><span class="keyword">class </span>ApiTest : <span class="keyword">public</span> <a class="code hl_class" href="classdrogon_1_1HttpController.html">drogon::HttpController</a>&lt;ApiTest, false&gt;</div>
<div class="line">{</div>
<div class="line">    <span class="keyword">public</span>:</div>
<div class="line">        ApiTest(<span class="keyword">const</span> std::string &amp;str);</div>
<div class="line">    ...</div>
<div class="line">};</div>
<div class="ttc" id="aclassdrogon_1_1HttpController_html"><div class="ttname"><a href="classdrogon_1_1HttpController.html">drogon::HttpController</a></div><div class="ttdoc">The reflection base class template for HTTP controllers</div><div class="ttdef"><b>Definition</b> HttpController.h:60</div></div>
</div><!-- fragment --> The second template parameter must be explicitly set to false to disable automatic creation. And then user can create and register it somewhere as follows: <div class="fragment"><div class="line"><span class="keyword">auto</span> ctrlPtr=std::make_shared&lt;ApiTest&gt;(<span class="stringliteral">&quot;hello world&quot;</span>);</div>
<div class="line"><a class="code hl_function" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">drogon::app</a>().<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a910393970399e64c391d92f8360f99bf">registerController</a>(ctrlPtr);</div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a910393970399e64c391d92f8360f99bf"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a910393970399e64c391d92f8360f99bf">drogon::HttpAppFramework::registerController</a></div><div class="ttdeci">HttpAppFramework &amp; registerController(const std::shared_ptr&lt; T &gt; &amp;ctrlPtr)</div><div class="ttdoc">Register controller objects created and initialized by the user</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:672</div></div>
</div><!-- fragment --> This method should be called before calling the <a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">app()</a>.<a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e" title="Run the event loop">run()</a> method. </dd></dl>

</div>
</div>
<a id="a182d73ab3ebc7779a3d22ea7ae92417b" name="a182d73ab3ebc7779a3d22ea7ae92417b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a182d73ab3ebc7779a3d22ea7ae92417b">&#9670;&#160;</a></span>registerCustomExtensionMime()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerCustomExtensionMime </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>ext</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>mime</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Adds a new custom extension to MIME type mapping </p>

</div>
</div>
<a id="a7eb8c7537a3321e5221616400337f781" name="a7eb8c7537a3321e5221616400337f781"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7eb8c7537a3321e5221616400337f781">&#9670;&#160;</a></span>registerFilter()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerFilter </td>
          <td>(</td>
          <td class="paramtype">const std::shared_ptr&lt; T &gt; &amp;&#160;</td>
          <td class="paramname"><em>filterPtr</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register filter objects created and initialized by the user </p>
<p>This method is similar to the above method. </p>

</div>
</div>
<a id="ad00fae1ce683797d2ef05dae7177e7b7" name="ad00fae1ce683797d2ef05dae7177e7b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad00fae1ce683797d2ef05dae7177e7b7">&#9670;&#160;</a></span>registerHandler()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FUNCTION &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerHandler </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>pathPattern</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FUNCTION &amp;&amp;&#160;</td>
          <td class="paramname"><em>function</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; internal::HttpConstraint &gt; &amp;&#160;</td>
          <td class="paramname"><em>constraints</em> = <code>{}</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>handlerName</em> = <code>&quot;&quot;</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register a handler into the framework. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">pathPattern</td><td>When the path of a http request matches the pathPattern, the handler indicated by the function parameter is called. </td></tr>
    <tr><td class="paramname">function</td><td>indicates any type of callable object with a valid processing interface. </td></tr>
    <tr><td class="paramname">constraints</td><td>is the same as the third parameter in the above method.</td></tr>
  </table>
  </dd>
</dl>
<p>Example: </p><div class="fragment"><div class="line">  <a class="code hl_function" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">app</a>().<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#ad00fae1ce683797d2ef05dae7177e7b7">registerHandler</a>(<span class="stringliteral">&quot;/hello?username={1}&quot;</span>,</div>
<div class="line">                        [](<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a>&amp; req,</div>
<div class="line">                           std::function&lt;<span class="keywordtype">void</span> (<span class="keyword">const</span> <a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>&amp;)&gt;</div>
<div class="line">&amp;&amp;callback, <span class="keyword">const</span> std::string &amp;name)</div>
<div class="line">                           {</div>
<div class="line">                               Json::Value json;</div>
<div class="line">                               json[<span class="stringliteral">&quot;result&quot;</span>]=<span class="stringliteral">&quot;ok&quot;</span>;</div>
<div class="line">                               json[<span class="stringliteral">&quot;message&quot;</span>]=std::string(<span class="stringliteral">&quot;hello,&quot;</span>)+name;</div>
<div class="line">                               <span class="keyword">auto</span></div>
<div class="line">resp=<a class="code hl_function" href="classdrogon_1_1HttpResponse.html#a82c46a1155b1ff1494f5995b241b4034">HttpResponse::newHttpJsonResponse</a>(json); callback(resp);</div>
<div class="line">                           },</div>
<div class="line">                        {<a class="code hl_enumvalue" href="namespacedrogon.html#a4e9a968fbdc3aa357cefc8aca7e99642a75fb549258cb7c0e1f7e4af3c67c3f1c">Get</a>,<span class="stringliteral">&quot;LoginFilter&quot;</span>});</div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_ad00fae1ce683797d2ef05dae7177e7b7"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#ad00fae1ce683797d2ef05dae7177e7b7">drogon::HttpAppFramework::registerHandler</a></div><div class="ttdeci">HttpAppFramework &amp; registerHandler(const std::string &amp;pathPattern, FUNCTION &amp;&amp;function, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints={}, const std::string &amp;handlerName=&quot;&quot;)</div><div class="ttdoc">Register a handler into the framework.</div><div class="ttdef"><b>Definition</b> HttpAppFramework.h:535</div></div>
<div class="ttc" id="aclassdrogon_1_1HttpResponse_html_a82c46a1155b1ff1494f5995b241b4034"><div class="ttname"><a href="classdrogon_1_1HttpResponse.html#a82c46a1155b1ff1494f5995b241b4034">drogon::HttpResponse::newHttpJsonResponse</a></div><div class="ttdeci">static HttpResponsePtr newHttpJsonResponse(const Json::Value &amp;data)</div></div>
<div class="ttc" id="anamespacedrogon_html_a4e9a968fbdc3aa357cefc8aca7e99642a75fb549258cb7c0e1f7e4af3c67c3f1c"><div class="ttname"><a href="namespacedrogon.html#a4e9a968fbdc3aa357cefc8aca7e99642a75fb549258cb7c0e1f7e4af3c67c3f1c">drogon::Get</a></div><div class="ttdeci">@ Get</div><div class="ttdef"><b>Definition</b> HttpTypes.h:191</div></div>
<div class="ttc" id="anamespacedrogon_html_a5200699555f98a809538342baa167aad"><div class="ttname"><a href="namespacedrogon.html#a5200699555f98a809538342baa167aad">drogon::HttpRequestPtr</a></div><div class="ttdeci">std::shared_ptr&lt; HttpRequest &gt; HttpRequestPtr</div><div class="ttdef"><b>Definition</b> drogon_callbacks.h:26</div></div>
<div class="ttc" id="anamespacedrogon_html_ab2a2d829bb017f43c2c9de72f4042baa"><div class="ttname"><a href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">drogon::HttpResponsePtr</a></div><div class="ttdeci">std::shared_ptr&lt; HttpResponse &gt; HttpResponsePtr</div><div class="ttdef"><b>Definition</b> drogon_callbacks.h:24</div></div>
</div><!-- fragment --> <dl class="section note"><dt>注解</dt><dd>As you can see in the above example, this method supports parameters mapping. </dd></dl>

</div>
</div>
<a id="a544b6539c7ffebce6c73f963502c6c99" name="a544b6539c7ffebce6c73f963502c6c99"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a544b6539c7ffebce6c73f963502c6c99">&#9670;&#160;</a></span>registerHandlerViaRegex()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename FUNCTION &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerHandlerViaRegex </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>regExp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">FUNCTION &amp;&amp;&#160;</td>
          <td class="paramname"><em>function</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; internal::HttpConstraint &gt; &amp;&#160;</td>
          <td class="paramname"><em>constraints</em> = <code>{}</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>handlerName</em> = <code>&quot;&quot;</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register a handler into the framework via a regular expression. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">regExp</td><td>A regular expression string, when the path of a http request matches the regular expression, the handler indicated by the function parameter is called. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>When the match is successful, Each string that matches a subexpression is sequentially mapped to a handler parameter. </dd></dl>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">function</td><td>indicates any type of callable object with a valid processing interface. </td></tr>
    <tr><td class="paramname">constraints</td><td>is the same as the third parameter in the above method. </td></tr>
    <tr><td class="paramname">handlerName</td><td>a name for the handler. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a>&amp; </dd></dl>

</div>
</div>
<a id="a4f2096ccf94dd558ce1c5751783c0430" name="a4f2096ccf94dd558ce1c5751783c0430"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4f2096ccf94dd558ce1c5751783c0430">&#9670;&#160;</a></span>registerHttpResponseCreationAdvice()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerHttpResponseCreationAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void(const <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an advice for new HTTP responses. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called immediately when a new HTTP response is created. Users can use the callback to modify the response if they want. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This advice is called before any subsequent operation on the response is performed by drogon or applications, so some modification (e.g. modification on the status code) in this callback may be override by subsequent operations. </dd></dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a>&amp; </dd></dl>

</div>
</div>
<a id="a70620e30f472b8ddd5a07d49d7c44bed" name="a70620e30f472b8ddd5a07d49d7c44bed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a70620e30f472b8ddd5a07d49d7c44bed">&#9670;&#160;</a></span>registerHttpSimpleController()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerHttpSimpleController </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>pathName</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>ctrlName</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; internal::HttpConstraint &gt; &amp;&#160;</td>
          <td class="paramname"><em>constraints</em> = <code>{}</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register a <a class="el" href="classdrogon_1_1HttpSimpleController.html" title="The reflection base class template for HTTP simple controllers">HttpSimpleController</a> object into the framework. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">pathName</td><td>When the path of a http request is equal to the pathName, the asyncHandleHttpRequest() method of the controller is called. </td></tr>
    <tr><td class="paramname">ctrlName</td><td>is the name of the controller. It includes the namespace to which the controller belongs. </td></tr>
    <tr><td class="paramname">constraints</td><td>is a vector containing Http methods or middleware names <pre class="fragment">Example:
</pre> <div class="fragment"><div class="line"><a class="code hl_function" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">app</a>.<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a70620e30f472b8ddd5a07d49d7c44bed">registerHttpSimpleController</a>(<span class="stringliteral">&quot;/userinfo&quot;</span>,<span class="stringliteral">&quot;UserInfoCtrl&quot;</span>,{<a class="code hl_enumvalue" href="namespacedrogon.html#a4e9a968fbdc3aa357cefc8aca7e99642a75fb549258cb7c0e1f7e4af3c67c3f1c">Get</a>,<span class="stringliteral">&quot;LoginFilter&quot;</span>});</div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a70620e30f472b8ddd5a07d49d7c44bed"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a70620e30f472b8ddd5a07d49d7c44bed">drogon::HttpAppFramework::registerHttpSimpleController</a></div><div class="ttdeci">virtual HttpAppFramework &amp; registerHttpSimpleController(const std::string &amp;pathName, const std::string &amp;ctrlName, const std::vector&lt; internal::HttpConstraint &gt; &amp;constraints={})=0</div><div class="ttdoc">Register a HttpSimpleController object into the framework.</div></div>
</div><!-- fragment --></td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>Users can perform the same operation through the configuration file or a macro in the header file. </dd></dl>

</div>
</div>
<a id="a5ceb03d8c45fab4f83b5d273cef8123e" name="a5ceb03d8c45fab4f83b5d273cef8123e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ceb03d8c45fab4f83b5d273cef8123e">&#9670;&#160;</a></span>registerMiddleware()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerMiddleware </td>
          <td>(</td>
          <td class="paramtype">const std::shared_ptr&lt; T &gt; &amp;&#160;</td>
          <td class="paramname"><em>middlewarePtr</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register middleware objects created and initialized by the user </p>
<p>This method is similar to the above method. </p>

</div>
</div>
<a id="a56400ea928b04fa063aec0296bc2a4d7" name="a56400ea928b04fa063aec0296bc2a4d7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a56400ea928b04fa063aec0296bc2a4d7">&#9670;&#160;</a></span>registerNewConnectionAdvice()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerNewConnectionAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; bool(const trantor::InetAddress &amp;, const trantor::InetAddress &amp;)&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an advice for new connections </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called immediately when a new connection is established. the first parameter of it is the remote address of the new connection, the second one is the local address of it. If the advice returns a false value, drogon closes the connection. Users can use this advice to implement some security policies. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="aba2cdc1128b3e48d34119cd03c1f46b3" name="aba2cdc1128b3e48d34119cd03c1f46b3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba2cdc1128b3e48d34119cd03c1f46b3">&#9670;&#160;</a></span>registerPostHandlingAdvice()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerPostHandlingAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;, const <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an advice called after the request is handled </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called immediately after the request is handled and a response object is created by handlers. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a561bb2c79c7e50f25bf22e9d2dbed4c4" name="a561bb2c79c7e50f25bf22e9d2dbed4c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a561bb2c79c7e50f25bf22e9d2dbed4c4">&#9670;&#160;</a></span>registerPostRoutingAdvice() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerPostRoutingAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an observer called after routing </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called at the same time as the above advice. It can be thought of as an observer who cannot respond to http requests. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This advice has less overhead than the above one. If one does not intend to intercept the http request, please use this interface. </dd></dl>

</div>
</div>
<a id="a67e7e6ced70a0f06d3b6ed67bceda81e" name="a67e7e6ced70a0f06d3b6ed67bceda81e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a67e7e6ced70a0f06d3b6ed67bceda81e">&#9670;&#160;</a></span>registerPostRoutingAdvice() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerPostRoutingAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;, <a class="el" href="namespacedrogon.html#a537d4ab1b522ccee2c3377c4d8ea4a2e">AdviceCallback</a> &amp;&amp;, <a class="el" href="namespacedrogon.html#a32156d4371a4c378893f8c3a7f2b54c3">AdviceChainCallback</a> &amp;&amp;)&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an advice called after routing </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called immediately after the request matches a handler path and before any filters/middlewares applies. The parameters of the advice are same as those of the doFilter method of the Filter class. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ac5d36ac393507bbe1c3efbd16ead94ca" name="ac5d36ac393507bbe1c3efbd16ead94ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac5d36ac393507bbe1c3efbd16ead94ca">&#9670;&#160;</a></span>registerPreHandlingAdvice() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerPreHandlingAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an observer called before the request is handled </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called at the same time as the above advice. It can be thought of as an observer who cannot respond to http requests. This advice has less overhead than the above one. If one does not intend to intercept the http request, please use this interface. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a0e430398838613d0275ccd25833cba54" name="a0e430398838613d0275ccd25833cba54"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0e430398838613d0275ccd25833cba54">&#9670;&#160;</a></span>registerPreHandlingAdvice() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerPreHandlingAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;, <a class="el" href="namespacedrogon.html#a537d4ab1b522ccee2c3377c4d8ea4a2e">AdviceCallback</a> &amp;&amp;, <a class="el" href="namespacedrogon.html#a32156d4371a4c378893f8c3a7f2b54c3">AdviceChainCallback</a> &amp;&amp;)&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an advice called before the request is handled </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called immediately after the request is approved by all filters/middlewares and before it is handled. The parameters of the advice are same as those of the doFilter method of the Filter class. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="abe544fdfd2e493efe64e2ebff637800d" name="abe544fdfd2e493efe64e2ebff637800d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abe544fdfd2e493efe64e2ebff637800d">&#9670;&#160;</a></span>registerPreRoutingAdvice() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerPreRoutingAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an observer called before routing </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called at the same time as the above advice. It can be thought of as an observer who cannot respond to http requests. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This advice has less overhead than the above one. If one does not intend to intercept the http request, please use this interface. </dd></dl>

</div>
</div>
<a id="a7ccdc4847bcdf044c2d8cd884f176b9b" name="a7ccdc4847bcdf044c2d8cd884f176b9b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ccdc4847bcdf044c2d8cd884f176b9b">&#9670;&#160;</a></span>registerPreRoutingAdvice() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerPreRoutingAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;, <a class="el" href="namespacedrogon.html#a537d4ab1b522ccee2c3377c4d8ea4a2e">AdviceCallback</a> &amp;&amp;, <a class="el" href="namespacedrogon.html#a32156d4371a4c378893f8c3a7f2b54c3">AdviceChainCallback</a> &amp;&amp;)&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an advice called before routing </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called after all the synchronous advice return nullptr and before the request is routed to any handler. The parameters of the advice are same as those of the doFilter method of the Filter class. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a51de1aa2e007cd261435b0d8ad6c5b1d" name="a51de1aa2e007cd261435b0d8ad6c5b1d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a51de1aa2e007cd261435b0d8ad6c5b1d">&#9670;&#160;</a></span>registerPreSendingAdvice()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerPreSendingAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;, const <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;)&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an advice called before a response is sent to the client. </p>
<dl class="section note"><dt>注解</dt><dd>This advice is different from the PostHandlingAdvice, responses to static resources are also handled here. </dd></dl>

</div>
</div>
<a id="a68bae121605b64f6694f011471607ed2" name="a68bae121605b64f6694f011471607ed2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a68bae121605b64f6694f011471607ed2">&#9670;&#160;</a></span>registerSessionDestroyAdvice()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerSessionDestroyAdvice </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespacedrogon.html#a4a6e4ad19b218191e589e6e665442c82">AdviceDestroySessionCallback</a> &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an advice called when destroying a session. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called with the session id. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a1d469f2033f6466ee445cdad67d3fb88" name="a1d469f2033f6466ee445cdad67d3fb88"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a1d469f2033f6466ee445cdad67d3fb88">&#9670;&#160;</a></span>registerSessionStartAdvice()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerSessionStartAdvice </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespacedrogon.html#a7d7b482287e81a3b7d94a203b5d54b43">AdviceStartSessionCallback</a> &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register an advice called when starting a new session. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called with the session id. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4" name="ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad5e2cab4b9bdce0dbf40fcb8bd5d4ec4">&#9670;&#160;</a></span>registerSyncAdvice()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerSyncAdvice </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;)&gt; &amp;&#160;</td>
          <td class="paramname"><em>advice</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register a synchronous advice </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">advice</td><td>is called immediately after the request is created. If a no-empty response is returned by the advice, it is sent to the client and no handler is invoked.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>The following diagram shows the location of the AOP join points during http request processing.</dd></dl>
<div class="fragment"><div class="line">                   +-----------+                             +----------+</div>
<div class="line">                   |  Request  |                             | Response |</div>
<div class="line">                   +-----------+                             +----------+</div>
<div class="line">                         |                                         ^</div>
<div class="line">                         v                                         |</div>
<div class="line">         sync join point o-----------&gt;[<a class="code hl_typedef" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>]-----------&gt;+</div>
<div class="line">                         |                                         |</div>
<div class="line">                         v                                         |</div>
<div class="line">  Pre-routing join point o-----------&gt;[Advice callback]-----------&gt;+</div>
<div class="line">                         |                                         |</div>
<div class="line">                         v         <a class="code hl_enumvalue" href="namespacedrogon.html#a4e9a968fbdc3aa357cefc8aca7e99642a8a70c65ea97330558a43d1c776a111e9">Invalid</a> path                    |</div>
<div class="line">                   [Find Handler]----------------&gt;[404]-----------&gt;+</div>
<div class="line">                         |                                         |</div>
<div class="line">                         v                                         |</div>
<div class="line"> <a class="code hl_enumvalue" href="namespacedrogon.html#a4e9a968fbdc3aa357cefc8aca7e99642aec42ff7f0554d8c13cba364befd00248">Post</a>-routing join point o-----------&gt;[Advice callback]-----------&gt;+</div>
<div class="line">                         |                                         |</div>
<div class="line">                         v        <a class="code hl_enumvalue" href="namespacedrogon.html#a4e9a968fbdc3aa357cefc8aca7e99642a8a70c65ea97330558a43d1c776a111e9">Invalid</a> method                   |</div>
<div class="line">                   [Check Method]----------------&gt;[405]-----------&gt;+</div>
<div class="line">                         |                                         |</div>
<div class="line">                         v                                         |</div>
<div class="line">               [Filters/Middlewares]------&gt;[Filter callback]------&gt;+</div>
<div class="line">                         |                                         |</div>
<div class="line">                         v             Y                           |</div>
<div class="line">                [Is OPTIONS method?]-------------&gt;[200]-----------&gt;+</div>
<div class="line">                         |                                         |</div>
<div class="line">                         v                                         |</div>
<div class="line"> Pre-handling join point o-----------&gt;[Advice callback]-----------&gt;+</div>
<div class="line">                         |                                         |</div>
<div class="line">                         v                                         |</div>
<div class="line">                     [Handler]                                     |</div>
<div class="line">                         |                                         |</div>
<div class="line">                         v                                         |</div>
<div class="line"><a class="code hl_enumvalue" href="namespacedrogon.html#a4e9a968fbdc3aa357cefc8aca7e99642aec42ff7f0554d8c13cba364befd00248">Post</a>-handling join point o----------------------------------------&gt;+</div>
<div class="line">                         |                                         |</div>
<div class="line">                         v                                         |</div>
<div class="line">              [Middlewares post logic]---&gt;[Middleware callback]---&gt;+</div>
<div class="ttc" id="anamespacedrogon_html_a4e9a968fbdc3aa357cefc8aca7e99642a8a70c65ea97330558a43d1c776a111e9"><div class="ttname"><a href="namespacedrogon.html#a4e9a968fbdc3aa357cefc8aca7e99642a8a70c65ea97330558a43d1c776a111e9">drogon::Invalid</a></div><div class="ttdeci">@ Invalid</div><div class="ttdef"><b>Definition</b> HttpTypes.h:198</div></div>
<div class="ttc" id="anamespacedrogon_html_a4e9a968fbdc3aa357cefc8aca7e99642aec42ff7f0554d8c13cba364befd00248"><div class="ttname"><a href="namespacedrogon.html#a4e9a968fbdc3aa357cefc8aca7e99642aec42ff7f0554d8c13cba364befd00248">drogon::Post</a></div><div class="ttdeci">@ Post</div><div class="ttdef"><b>Definition</b> HttpTypes.h:192</div></div>
</div><!-- fragment --> 
</div>
</div>
<a id="a194c7c36502fdd6bc23a033ca2fa4cec" name="a194c7c36502fdd6bc23a033ca2fa4cec"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a194c7c36502fdd6bc23a033ca2fa4cec">&#9670;&#160;</a></span>registerWebSocketController()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerWebSocketController </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>pathName</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>ctrlName</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; internal::HttpConstraint &gt; &amp;&#160;</td>
          <td class="paramname"><em>constraints</em> = <code>{}</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register a <a class="el" href="classdrogon_1_1WebSocketController.html" title="The reflection base class template for WebSocket controllers">WebSocketController</a> into the framework. </p>
<p>The parameters of this method are the same as those in the <a class="el" href="classdrogon_1_1HttpAppFramework.html#a70620e30f472b8ddd5a07d49d7c44bed" title="Register a HttpSimpleController object into the framework.">registerHttpSimpleController()</a> method. </p>

</div>
</div>
<a id="add1ce3a3afbd29df586bab2a7f540819" name="add1ce3a3afbd29df586bab2a7f540819"></a>
<h2 class="memtitle"><span class="permalink"><a href="#add1ce3a3afbd29df586bab2a7f540819">&#9670;&#160;</a></span>registerWebSocketControllerRegex()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::registerWebSocketControllerRegex </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>regExp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>ctrlName</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; internal::HttpConstraint &gt; &amp;&#160;</td>
          <td class="paramname"><em>constraints</em> = <code>std::vector&lt;&#160;internal::HttpConstraint&#160;&gt;{}</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Register a <a class="el" href="classdrogon_1_1WebSocketController.html" title="The reflection base class template for WebSocket controllers">WebSocketController</a> into the framework. </p>
<p>The parameters of this method are the same as those in the <a class="el" href="classdrogon_1_1HttpAppFramework.html#a70620e30f472b8ddd5a07d49d7c44bed" title="Register a HttpSimpleController object into the framework.">registerHttpSimpleController()</a> method but using regular expression string for path. </p>

</div>
</div>
<a id="a6ce215269eff3565941a41f8fa5262f9" name="a6ce215269eff3565941a41f8fa5262f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ce215269eff3565941a41f8fa5262f9">&#9670;&#160;</a></span>reloadSSLFiles()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::reloadSSLFiles </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Reload the global cert file and private key file for https server Note: The goal of this method is not to make the framework use the new SSL path, but rather to reload the new content from the old path while the framework is still running. Typically, when our SSL is about to expire, we need to reload the SSL. The purpose of this function is to use the new SSL certificate without stopping the framework. </p>

</div>
</div>
<a id="a865eff6a9fe531389ca6f73b5b057c8f" name="a865eff6a9fe531389ca6f73b5b057c8f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a865eff6a9fe531389ca6f73b5b057c8f">&#9670;&#160;</a></span>reusePort()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool drogon::HttpAppFramework::reusePort </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Return if the ReusePort mode is enabled. </p>

</div>
</div>
<a id="a4c12778b39a3cd7e5bc1bafb285d118e" name="a4c12778b39a3cd7e5bc1bafb285d118e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4c12778b39a3cd7e5bc1bafb285d118e">&#9670;&#160;</a></span>run()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void drogon::HttpAppFramework::run </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Run the event loop </p>
<p>Calling this method starts the IO event loops and the main loop of the application; This method can be called in the main thread or any other thread. This method blocks the current thread until the main event loop exits. </p>

</div>
</div>
<a id="a8798844067f66159bd0377f816999967" name="a8798844067f66159bd0377f816999967"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8798844067f66159bd0377f816999967">&#9670;&#160;</a></span>setAfterAcceptSockOptCallback()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setAfterAcceptSockOptCallback </td>
          <td>(</td>
          <td class="paramtype">std::function&lt; void(int)&gt;&#160;</td>
          <td class="paramname"><em>cb</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the after accept setsockopt callback. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cb</td><td>This callback will be called after accept </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a8fb989335bfd8f81be21514799c04de3" name="a8fb989335bfd8f81be21514799c04de3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8fb989335bfd8f81be21514799c04de3">&#9670;&#160;</a></span>setBeforeListenSockOptCallback()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setBeforeListenSockOptCallback </td>
          <td>(</td>
          <td class="paramtype">std::function&lt; void(int)&gt;&#160;</td>
          <td class="paramname"><em>cb</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the before listen setsockopt callback. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cb</td><td>This callback will be called before the listen </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a9a97e8d845b2cbc974ba04341c278fc9" name="a9a97e8d845b2cbc974ba04341c278fc9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9a97e8d845b2cbc974ba04341c278fc9">&#9670;&#160;</a></span>setBrStatic()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setBrStatic </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>useGzipStatic</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the br_static option. </p>
<p>If it is set to true, when the client requests a static file, drogon first finds the compressed file with the extension ".br" in the same path and send the compressed file to the client. The default value is true.</p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a36c0da321a5b8ea26d04b1870d8c6275" name="a36c0da321a5b8ea26d04b1870d8c6275"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a36c0da321a5b8ea26d04b1870d8c6275">&#9670;&#160;</a></span>setClientMaxBodySize()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setClientMaxBodySize </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>maxSize</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the max body size of the requests received by drogon. </p>
<p>The default value is 1M. </p><dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="aaf62c16bf24e4997903a8e88a83debbd" name="aaf62c16bf24e4997903a8e88a83debbd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aaf62c16bf24e4997903a8e88a83debbd">&#9670;&#160;</a></span>setClientMaxMemoryBodySize()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setClientMaxMemoryBodySize </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>maxSize</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the maximum body size in memory of HTTP requests received by drogon. </p>
<p>The default value is "64K" bytes. If the body size of a HTTP request exceeds this limit, the body is stored to a temporary file for processing.</p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a45928b4c3da43543455a6298821761f9" name="a45928b4c3da43543455a6298821761f9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a45928b4c3da43543455a6298821761f9">&#9670;&#160;</a></span>setClientMaxWebSocketMessageSize()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setClientMaxWebSocketMessageSize </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>maxSize</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the max size of messages sent by WebSocket client. </p>
<p>The default value is 128K. </p><dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="addb73b0199a3fe628f1628f511e26ec5" name="addb73b0199a3fe628f1628f511e26ec5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#addb73b0199a3fe628f1628f511e26ec5">&#9670;&#160;</a></span>setConnectionCallback()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setConnectionCallback </td>
          <td>(</td>
          <td class="paramtype">std::function&lt; void(const trantor::TcpConnectionPtr &amp;)&gt;&#160;</td>
          <td class="paramname"><em>cb</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the client disconnect or connect callback. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cb</td><td>This callback will be called, when the client disconnect or connect </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a4c6d63f9e8ea38d19cf220cca04eca52" name="a4c6d63f9e8ea38d19cf220cca04eca52"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4c6d63f9e8ea38d19cf220cca04eca52">&#9670;&#160;</a></span>setCustom404Page()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setCustom404Page </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a> &amp;&#160;</td>
          <td class="paramname"><em>resp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>set404</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set custom 404 page </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">resp</td><td>is the object set to 404 response After calling this method, the resp object is returned by the <a class="el" href="classdrogon_1_1HttpResponse.html#ae7dbe82af88eae091b7684edb67d5f99" title="Create a response which returns a 404 page.">HttpResponse::newNotFoundResponse()</a> method. </td></tr>
    <tr><td class="paramname">set404</td><td>if true, the status code of the resp will be set to 404 automatically </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a33e3d404b2b91723397e6c2861e7c7fc" name="a33e3d404b2b91723397e6c2861e7c7fc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a33e3d404b2b91723397e6c2861e7c7fc">&#9670;&#160;</a></span>setCustomErrorHandler() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setCustomErrorHandler </td>
          <td>(</td>
          <td class="paramtype">std::function&lt; <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(<a class="el" href="namespacedrogon.html#ad6cc6b2c3917537432fcde077e02cf2f">HttpStatusCode</a>)&gt; &amp;&amp;&#160;</td>
          <td class="paramname"><em>resp_generator</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a id="a097b900f53bc40913d8688e5e6abaf58" name="a097b900f53bc40913d8688e5e6abaf58"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a097b900f53bc40913d8688e5e6abaf58">&#9670;&#160;</a></span>setCustomErrorHandler() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setCustomErrorHandler </td>
          <td>(</td>
          <td class="paramtype">std::function&lt; <a class="el" href="namespacedrogon.html#ab2a2d829bb017f43c2c9de72f4042baa">HttpResponsePtr</a>(<a class="el" href="namespacedrogon.html#ad6cc6b2c3917537432fcde077e02cf2f">HttpStatusCode</a>, const <a class="el" href="namespacedrogon.html#a5200699555f98a809538342baa167aad">HttpRequestPtr</a> &amp;req)&gt; &amp;&amp;&#160;</td>
          <td class="paramname"><em>resp_generator</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set custom error handler </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">resp_generator</td><td>is invoked when an error in the framework needs to be sent to the client to provide a custom layout. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ade1a5ac01daf0fa3e0ca3ac61d71761b" name="ade1a5ac01daf0fa3e0ca3ac61d71761b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ade1a5ac01daf0fa3e0ca3ac61d71761b">&#9670;&#160;</a></span>setDefaultHandler()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setDefaultHandler </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespacedrogon.html#a6230a342ffa91efaf6e21f872158a1d4">DefaultHandler</a>&#160;</td>
          <td class="paramname"><em>handler</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Register a default handler into the framework when no handler matches the request. If set, it is executed if the static file router does not find any file corresponding to the request. Thus it replaces the default 404 not found response. </p><dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">handler</td><td>function indicates any type of callable object with a valid processing interface. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a77371eb0a56cde3fe1301e2f3ef7f2b9" name="a77371eb0a56cde3fe1301e2f3ef7f2b9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a77371eb0a56cde3fe1301e2f3ef7f2b9">&#9670;&#160;</a></span>setDocumentRoot()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setDocumentRoot </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>rootPath</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the root path of HTTP document, default path is ./ </p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a8cb71111ea2c0cf6e8d188719131f436" name="a8cb71111ea2c0cf6e8d188719131f436"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8cb71111ea2c0cf6e8d188719131f436">&#9670;&#160;</a></span>setExceptionHandler()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setExceptionHandler </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespacedrogon.html#a401611ee31e9c20e3114471db14cfb52">ExceptionHandler</a>&#160;</td>
          <td class="paramname"><em>handler</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>handler will be called upon an exception escapes a request handler </p>

</div>
</div>
<a id="a46367f2b300bfc09bea762c4402c1de2" name="a46367f2b300bfc09bea762c4402c1de2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a46367f2b300bfc09bea762c4402c1de2">&#9670;&#160;</a></span>setFileTypes()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setFileTypes </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; std::string &gt; &amp;&#160;</td>
          <td class="paramname"><em>types</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set types of files that can be downloaded. </p>
<p>Example: </p><div class="fragment"><div class="line"><a class="code hl_function" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">app</a>.<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#a46367f2b300bfc09bea762c4402c1de2">setFileTypes</a>({<span class="stringliteral">&quot;html&quot;</span>,<span class="stringliteral">&quot;txt&quot;</span>,<span class="stringliteral">&quot;png&quot;</span>,<span class="stringliteral">&quot;jpg&quot;</span>});</div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_a46367f2b300bfc09bea762c4402c1de2"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#a46367f2b300bfc09bea762c4402c1de2">drogon::HttpAppFramework::setFileTypes</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setFileTypes(const std::vector&lt; std::string &gt; &amp;types)=0</div><div class="ttdoc">Set types of files that can be downloaded.</div></div>
</div><!-- fragment --><dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a8a23c529a665eec3df0a9ca96862f6e8" name="a8a23c529a665eec3df0a9ca96862f6e8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8a23c529a665eec3df0a9ca96862f6e8">&#9670;&#160;</a></span>setFloatPrecisionInJson()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setFloatPrecisionInJson </td>
          <td>(</td>
          <td class="paramtype">unsigned int&#160;</td>
          <td class="paramname"><em>precision</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>precisionType</em> = <code>&quot;significant&quot;</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the float precision in Json string of HTTP requests or responses with json content. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">precision</td><td>The maximum digits length. </td></tr>
    <tr><td class="paramname">precisionType</td><td>Must be "significant" or "decimal", defaults to "significant" that means setting max number of significant digits in string, "decimal" means setting max number of digits after "." in string </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a>&amp; </dd></dl>

</div>
</div>
<a id="aa8345103776398d6143c9201731ad5a4" name="aa8345103776398d6143c9201731ad5a4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8345103776398d6143c9201731ad5a4">&#9670;&#160;</a></span>setGzipStatic()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setGzipStatic </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>useGzipStatic</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the gzip_static option. </p>
<p>If it is set to true, when the client requests a static file, drogon first finds the compressed file with the extension ".gz" in the same path and send the compressed file to the client. The default value is true.</p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a6cab6cc475b7ff44c048b345cc40a911" name="a6cab6cc475b7ff44c048b345cc40a911"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6cab6cc475b7ff44c048b345cc40a911">&#9670;&#160;</a></span>setHomePage()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setHomePage </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>homePageFile</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>If there isn't any handler registered to the path "/", the home page file in the "document_root" is send to clients as a response to the request for "/". </p><dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="ae969ce5c4165fe3472ca4da6c9232dcc" name="ae969ce5c4165fe3472ca4da6c9232dcc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae969ce5c4165fe3472ca4da6c9232dcc">&#9670;&#160;</a></span>setIdleConnectionTimeout() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setIdleConnectionTimeout </td>
          <td>(</td>
          <td class="paramtype">const std::chrono::duration&lt; double &gt; &amp;&#160;</td>
          <td class="paramname"><em>timeout</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>A wrapper of the above method. </p>
<p>Example: Users can set the timeout value as follows: </p><div class="fragment"><div class="line"><a class="code hl_function" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">app</a>().<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aa4fa25be4e600a3b9dbe881a39b0ea7a">setIdleConnectionTimeout</a>(0.5h);</div>
<div class="line"><a class="code hl_function" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906">app</a>().<a class="code hl_function" href="classdrogon_1_1HttpAppFramework.html#aa4fa25be4e600a3b9dbe881a39b0ea7a">setIdleConnectionTimeout</a>(30min);</div>
<div class="ttc" id="aclassdrogon_1_1HttpAppFramework_html_aa4fa25be4e600a3b9dbe881a39b0ea7a"><div class="ttname"><a href="classdrogon_1_1HttpAppFramework.html#aa4fa25be4e600a3b9dbe881a39b0ea7a">drogon::HttpAppFramework::setIdleConnectionTimeout</a></div><div class="ttdeci">virtual HttpAppFramework &amp; setIdleConnectionTimeout(size_t timeout)=0</div><div class="ttdoc">Set the lifetime of the connection without read or write</div></div>
</div><!-- fragment --> 
</div>
</div>
<a id="aa4fa25be4e600a3b9dbe881a39b0ea7a" name="aa4fa25be4e600a3b9dbe881a39b0ea7a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa4fa25be4e600a3b9dbe881a39b0ea7a">&#9670;&#160;</a></span>setIdleConnectionTimeout() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setIdleConnectionTimeout </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>timeout</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the lifetime of the connection without read or write </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">timeout</td><td>in seconds. 60 by default. Setting the timeout to 0 means that drogon does not close idle connections.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="adc6e26bbb45d1b14784d97d00e949ee9" name="adc6e26bbb45d1b14784d97d00e949ee9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adc6e26bbb45d1b14784d97d00e949ee9">&#9670;&#160;</a></span>setImplicitPage()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setImplicitPage </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>implicitPageFile</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the page which would the server load in if it detects that the user requested a directory </p>
<p>Set the HTML file that a directory would resolve to by default, default is "index.html" </p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a280b1e1a57aee757eccd92a0a2abe1e9" name="a280b1e1a57aee757eccd92a0a2abe1e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a280b1e1a57aee757eccd92a0a2abe1e9">&#9670;&#160;</a></span>setImplicitPageEnable()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setImplicitPageEnable </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>useImplicitPage</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set to enable implicit pages, enabled by default </p>
<p>Implicit pages are used when the server detects if the user requested a directory. By default, it will try to append index.html to the path, see <a class="el" href="classdrogon_1_1HttpAppFramework.html#adc6e26bbb45d1b14784d97d00e949ee9" title="Set the page which would the server load in if it detects that the user requested a directory">setImplicitPage()</a> if you want to customize this (<a href="http://localhost/a-directory">http://localhost/a-directory</a> resolves to <a href="http://localhost/a-directory/index.html">http://localhost/a-directory/index.html</a> by default).</p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="ad8d263e25fd3093a2991375043e8885d" name="ad8d263e25fd3093a2991375043e8885d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad8d263e25fd3093a2991375043e8885d">&#9670;&#160;</a></span>setIntSignalHandler()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setIntSignalHandler </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void()&gt; &amp;&#160;</td>
          <td class="paramname"><em>handler</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the INT Signal Handler. This method provides a way to users for exiting program gracefully. When the INT signal is received after <a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">app()</a>.<a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e" title="Run the event loop">run()</a> is called, the handler is invoked. Drogon uses a default signal handler for the INT signal, which calls the '<a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">app()</a>.<a class="el" href="classdrogon_1_1HttpAppFramework.html#aa7319b9724468565502b643e64472276" title="Quit the event loop">quit()</a>' method when the INT signal is received. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">handler</td><td></td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a>&amp; </dd></dl>

</div>
</div>
<a id="a17f4f8e6d76eb7fa28ab8bad5892d2b3" name="a17f4f8e6d76eb7fa28ab8bad5892d2b3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a17f4f8e6d76eb7fa28ab8bad5892d2b3">&#9670;&#160;</a></span>setJsonParserStackLimit()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setJsonParserStackLimit </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>limit</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the maximum stack depth of the json parser when reading a json string, the default value is 1000. </p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="ae1fb314a643797c3c838129ea1052c2a" name="ae1fb314a643797c3c838129ea1052c2a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae1fb314a643797c3c838129ea1052c2a">&#9670;&#160;</a></span>setKeepaliveRequestsNumber()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setKeepaliveRequestsNumber </td>
          <td>(</td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>number</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Set the maximum number of requests that can be served through one keep-alive connection. After the maximum number of requests are made, the connection is closed. The default value is 0 which means no limit.</p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a3d587ec6b873375e6512fd4cf1379c75" name="a3d587ec6b873375e6512fd4cf1379c75"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3d587ec6b873375e6512fd4cf1379c75">&#9670;&#160;</a></span>setLogLevel()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setLogLevel </td>
          <td>(</td>
          <td class="paramtype">trantor::Logger::LogLevel&#160;</td>
          <td class="paramname"><em>level</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the log level. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">level</td><td>is one of TRACE, DEBUG, INFO, WARN. The Default value is DEBUG.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="aa34219883b51989bebb0aef4f812707d" name="aa34219883b51989bebb0aef4f812707d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa34219883b51989bebb0aef4f812707d">&#9670;&#160;</a></span>setLogLocalTime()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setLogLocalTime </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>on</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the log time display </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">on</td><td>is true to display local time, false to display UTC time. The Default value is false.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="ac0ceb2bddf678e012b68bff13a2e032e" name="ac0ceb2bddf678e012b68bff13a2e032e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac0ceb2bddf678e012b68bff13a2e032e">&#9670;&#160;</a></span>setLogPath()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setLogPath </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>logPath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>logfileBaseName</em> = <code>&quot;&quot;</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>logSize</em> = <code>100000000</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>maxFiles</em> = <code>0</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>useSpdlog</em> = <code>false</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the output path of logs. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">logPath</td><td>The path to logs - logs to console if empty. </td></tr>
    <tr><td class="paramname">logfileBaseName</td><td>The base name of log files - defaults to "drogon" if empty. </td></tr>
    <tr><td class="paramname">logSize</td><td>indicates the maximum size of a log file. </td></tr>
    <tr><td class="paramname">maxFiles</td><td>max count of log file - 0 = unlimited. </td></tr>
    <tr><td class="paramname">useSpdlog</td><td>Use spdlog for logging (if compiled-in).</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a7a3f24f735d8b4a89d59952e006edb42" name="a7a3f24f735d8b4a89d59952e006edb42"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7a3f24f735d8b4a89d59952e006edb42">&#9670;&#160;</a></span>setMaxConnectionNum()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setMaxConnectionNum </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>maxConnections</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the maximum number of all connections. </p>
<p>The default value is 100000.</p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a518cebb7cca6a3cadaadac85dacf90cd" name="a518cebb7cca6a3cadaadac85dacf90cd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a518cebb7cca6a3cadaadac85dacf90cd">&#9670;&#160;</a></span>setMaxConnectionNumPerIP()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setMaxConnectionNumPerIP </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>maxConnectionsPerIP</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the maximum number of connections per remote IP. </p>
<p>The default value is 0 which means no limit.</p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a8cd9ddada2792e6ade214f1c892a675c" name="a8cd9ddada2792e6ade214f1c892a675c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8cd9ddada2792e6ade214f1c892a675c">&#9670;&#160;</a></span>setPipeliningRequestsNumber()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setPipeliningRequestsNumber </td>
          <td>(</td>
          <td class="paramtype">const size_t&#160;</td>
          <td class="paramname"><em>number</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Set the maximum number of unhandled requests that can be cached in pipelining buffer. The default value of 0 means no limit. After the maximum number of requests cached in pipelining buffer are made, the connection is closed.</p>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a8d764c9333057b4dff82d85112598a27" name="a8d764c9333057b4dff82d85112598a27"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8d764c9333057b4dff82d85112598a27">&#9670;&#160;</a></span>setServerHeaderField()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setServerHeaderField </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>server</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the 'server' header field in each response sent by drogon. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">server</td><td>empty string by default with which the 'server' header field is set to "Server: drogon/version string\r\n"</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a81a7e3e6e3788aaa5a2ae342241efa9f" name="a81a7e3e6e3788aaa5a2ae342241efa9f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a81a7e3e6e3788aaa5a2ae342241efa9f">&#9670;&#160;</a></span>setSSLConfigCommands()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setSSLConfigCommands </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; std::pair&lt; std::string, std::string &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>sslConfCmds</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Supplies file style SSL options to <code>SSL_CONF_cmd</code>. Valid options are available at <a href="https://www.openssl.org/docs/manmaster/man3/SSL_CONF_cmd.html">https://www.openssl.org/docs/manmaster/man3/SSL_CONF_cmd.html</a> </p>

</div>
</div>
<a id="ae7334018c6f5ab8c4c25b88744d3946d" name="ae7334018c6f5ab8c4c25b88744d3946d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae7334018c6f5ab8c4c25b88744d3946d">&#9670;&#160;</a></span>setSSLFiles()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setSSLFiles </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>certPath</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>keyPath</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Set the global cert file and private key file for https These options can be configured in the configuration file. </p>

</div>
</div>
<a id="afabfa25facbbc3f76345cfdf234ccc3b" name="afabfa25facbbc3f76345cfdf234ccc3b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afabfa25facbbc3f76345cfdf234ccc3b">&#9670;&#160;</a></span>setStaticFileHeaders()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setStaticFileHeaders </td>
          <td>(</td>
          <td class="paramtype">const std::vector&lt; std::pair&lt; std::string, std::string &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>headers</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the Static File Headers </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">headers</td><td>Each pair object in the vector presents the field name and field value of a header in an static file response. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a0a6a7b6f237941e16f09a26d41103c6f" name="a0a6a7b6f237941e16f09a26d41103c6f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0a6a7b6f237941e16f09a26d41103c6f">&#9670;&#160;</a></span>setStaticFilesCacheTime()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setStaticFilesCacheTime </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>cacheTime</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the time in which the static file response is cached in memory. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">cacheTime</td><td>in seconds. 0 means always cached, negative means no cache</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a9d6e58208adc803f4f1adbcae1c74ebd" name="a9d6e58208adc803f4f1adbcae1c74ebd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9d6e58208adc803f4f1adbcae1c74ebd">&#9670;&#160;</a></span>setTermSignalHandler()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setTermSignalHandler </td>
          <td>(</td>
          <td class="paramtype">const std::function&lt; void()&gt; &amp;&#160;</td>
          <td class="paramname"><em>handler</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the TERM Signal Handler. This method provides a way to users for exiting program gracefully. When the TERM signal is received after <a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">app()</a>.<a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e" title="Run the event loop">run()</a> is called, the handler is invoked. Drogon uses a default signal handler for the TERM signal, which calls the '<a class="el" href="namespacedrogon.html#a0be61eeb45a4c229be4041cd60d0d906" title="A wrapper of the instance() method">app()</a>.<a class="el" href="classdrogon_1_1HttpAppFramework.html#aa7319b9724468565502b643e64472276" title="Quit the event loop">quit()</a>' method when the TERM signal is received. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">handler</td><td></td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a>&amp; </dd></dl>

</div>
</div>
<a id="a15cfc37d6c6e565ef38ec1a999dfd6e2" name="a15cfc37d6c6e565ef38ec1a999dfd6e2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a15cfc37d6c6e565ef38ec1a999dfd6e2">&#9670;&#160;</a></span>setThreadNum()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setThreadNum </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>threadNum</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the number of threads for IO event loops </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">threadNum</td><td>the number of threads The default value is 1, if the parameter is 0, the number is equal to the number of CPU cores.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This number is usually less than or equal to the number of CPU cores. This number can be configured in the configuration file. </dd></dl>

</div>
</div>
<a id="ab68f020f7725e5eebcc98b6eedc7522e" name="ab68f020f7725e5eebcc98b6eedc7522e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab68f020f7725e5eebcc98b6eedc7522e">&#9670;&#160;</a></span>setUnicodeEscapingInJson()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setUnicodeEscapingInJson </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>enable</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span><span class="mlabel">noexcept</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>This method is to enable or disable the unicode escaping (\u) in the json string of HTTP responses or requests. it works (disable successfully) when the version of JsonCpp &gt;= 1.9.3, the unicode escaping is enabled by default. </p>

</div>
</div>
<a id="ab8617b790e684ba060b7847c795fe627" name="ab8617b790e684ba060b7847c795fe627"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab8617b790e684ba060b7847c795fe627">&#9670;&#160;</a></span>setupFileLogger()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setupFileLogger </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Setup output of logs to files </p>
<dl class="section note"><dt>注解</dt><dd>Logs are output to the standard output by default. Logging is setuped only if output path of logs is defined. This method is called in <a class="el" href="classdrogon_1_1HttpAppFramework.html#a4c12778b39a3cd7e5bc1bafb285d118e" title="Run the event loop">run()</a> function, hence use this method only if you want to setup logging earlier. </dd></dl>
<dl class="section return"><dt>返回</dt><dd><a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a>&amp; </dd></dl>

</div>
</div>
<a id="a69710ac035beff2eff428ca8aca62274" name="a69710ac035beff2eff428ca8aca62274"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a69710ac035beff2eff428ca8aca62274">&#9670;&#160;</a></span>setUploadPath()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classdrogon_1_1HttpAppFramework.html">HttpAppFramework</a> &amp; drogon::HttpAppFramework::setUploadPath </td>
          <td>(</td>
          <td class="paramtype">const std::string &amp;&#160;</td>
          <td class="paramname"><em>uploadPath</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Set the path to store uploaded files. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramname">uploadPath</td><td>is the directory where the uploaded files are stored. if it isn't prefixed with /, ./ or ../, it is relative path of document_root path, The default value is 'uploads'.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>注解</dt><dd>This operation can be performed by an option in the configuration file. </dd></dl>

</div>
</div>
<a id="a8ab6c816fadd534323d68d9ab65d910e" name="a8ab6c816fadd534323d68d9ab65d910e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8ab6c816fadd534323d68d9ab65d910e">&#9670;&#160;</a></span>staticFilesCacheTime()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual int drogon::HttpAppFramework::staticFilesCacheTime </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Get the time set by the above method. </p>

</div>
</div>
<a id="a395602917030a9f4d11455d77b99ae43" name="a395602917030a9f4d11455d77b99ae43"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a395602917030a9f4d11455d77b99ae43">&#9670;&#160;</a></span>supportSSL()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool drogon::HttpAppFramework::supportSSL </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Return true is drogon supports SSL(https) </p>

</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li><a class="el" href="HttpAppFramework_8h_source.html">HttpAppFramework.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
制作者&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>
